我正在阅读Java并发教程,以了解它在Java中是如何工作的,并有一个关于"MsLunch“示例@ http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html的问题
我试图在MsLunch示例中理解如下所示的编码与使用2种同步方法之间的区别。
据我所理解,在方法上使用synchronized
关键字依赖于与该方法对象相关联的instrinic锁。因此,如果class
有两个synchronized
方法a()
和b()
,则不能在同一个对象上并发调用a()
和b()
。
但是,编写a()
和b()
代码(如MsLunch类中所示)允许同时在同一个对象上调用这两个方法。
我的理解正确吗?
发布于 2014-02-05 09:19:46
MsLunch
示例使用具有不同对象实例的synchronized
块进行锁定。因此,inc1()
和inc2()
都可以同时运行。
如果它是同步的方法,在这种情况下,将使用this
来锁定,方法inc1()
和inc2()
将被串行执行。
发布于 2014-02-05 09:20:12
在http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html中,MSLunch具有同步块,而不是同步方法,这些方法也位于两个不同的锁上,因此是的,两个线程将不会被相互阻塞,并且能够同时访问方法。
https://stackoverflow.com/questions/21572855
复制相似问题