我正在浏览 Java 并发教程,以了解它在 Java 中的工作原理,并对“MsLunch”示例 @ http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html 有疑问。
我试图理解 MsLunch 示例中所示的编码与使用 2 个同步方法之间的区别。
据我所知,在方法上使用synchronized
关键字依赖于与该方法对象关联的固有锁。因此,如果一个类
有两个同步
方法a()
和b()
,a()
和 b()
不能在同一对象上同时调用。
但是如 MsLunch 类中所示编码 a()
和 b()
允许同时在同一对象上调用这两个方法。
我的理解正确吗?
最佳答案
MsLunch
示例使用具有不同对象实例的synchronized
block 来锁定。因此 inc1()
和 inc2()
可以同时运行。
如果是同步方法,那么 this
将用于锁定,方法 inc1()
和 inc2()
将是串行执行。
关于Java 线程教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572855/