Java线程教程

时间:2014-02-05 09:11:05

标签: java multithreading

我正在查看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()允许同时在同一个对象上调用这两个方法。

我的理解是否正确?

2 个答案:

答案 0 :(得分:1)

MsLunch示例使用具有不同对象实例的synchronized块来锁定。因此,inc1()inc2()可以同时运行。

如果是同步方法,那么this将用于锁定,方法inc1()inc2()将被串行执行。

答案 1 :(得分:0)

http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html MSLunch在两个不同的锁上也有同步块而不是同步方法所以是两个线程不会被相互阻塞,并且能够同时访问方法。