我正在查看Java并发教程,以了解它如何在Java中工作,并对“MsLunch”示例@ http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
提出疑问我试图在MsLunch示例中理解,如图所示编码它与使用2个同步方法之间的区别。
根据我的理解,在方法上使用synchronized
关键字依赖于与该方法对象关联的instrinic锁。因此,如果class
有两个synchronized
方法a()
和b()
,则a()
和b()
无法在同一个对象上同时调用。
但是如MsLunch类所示编码a()
和b()
允许同时在同一个对象上调用这两个方法。
我的理解是否正确?
答案 0 :(得分:1)
MsLunch
示例使用具有不同对象实例的synchronized
块来锁定。因此,inc1()
和inc2()
可以同时运行。
如果是同步方法,那么this
将用于锁定,方法inc1()
和inc2()
将被串行执行。
答案 1 :(得分:0)
在http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html MSLunch在两个不同的锁上也有同步块而不是同步方法所以是两个线程不会被相互阻塞,并且能够同时访问方法。