回答这个问题前先搞清楚四个概念:对象锁、类锁、对象方法、类方法。
(1)对象锁:Java为每个对象分配一个锁。
(2)Java为每个类分配一个锁。
(3)非静态方法为对象方法。
(4)静态方法为类方法。
搞清楚这4个概念,基本上也就知道了答案。
静态方法是类方法。所以静态方法加的锁是类锁。非静态方法是对象方法,非静态方法加锁是对象锁。因为每一个类、每一个对象都只有一个锁,所以当类静态方法a()持有锁时,
该类的其他静态方法只能等待静态方法a()释放锁。非静态方法亦然,当对象方法b()持有对象锁的时候,该对象的其他方法就要等待b()方法释放该对象锁。