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

来源:互联网 发布:虫虫钢琴软件 编辑:程序博客网 时间:2024/05/29 04:26

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

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

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

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

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

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

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

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

阅读全文
0 0
原创粉丝点击