静态方法加synchronized和非动态方法加synchronized的区别

回答这个问题前先搞清楚四个概念:对象锁、类锁、对象方法、类方法。

(1)对象锁:Java为每个对象分配一个锁。

(2)Java为每个类分配一个锁。

(3)非静态方法为对象方法。

(4)静态方法为类方法。

搞清楚这4个概念,基本上也就知道了答案。

静态方法是类方法。所以静态方法加的锁是类锁。非静态方法是对象方法,非静态方法加锁是对象锁。因为每一个类、每一个对象都只有一个锁,所以当类静态方法a()持有锁时,

该类的其他静态方法只能等待静态方法a()释放锁。非静态方法亦然,当对象方法b()持有对象锁的时候,该对象的其他方法就要等待b()方法释放该对象锁。

猜你喜欢

转载自blog.csdn.net/chenyu201003/article/details/78035139