我正在阅读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
复制相似问题