黑马程序员技术交流社区

标题: 在一个对象上两个线程可以调用两个不同的同步实例方法吗. [打印本页]

作者: 张涛的狂怒    时间: 2014-8-6 00:08
标题: 在一个对象上两个线程可以调用两个不同的同步实例方法吗.
本帖最后由 张涛的狂怒 于 2014-8-6 10:12 编辑

在一个对象上两个线程可以调用两个不同的同步实例方法吗?
那么如果一个同步方法已经执行,线程能调用对象上的非同步实例方法吗?

作者: fxwb2005    时间: 2014-8-6 00:23
你所说的实例方法指的是run?
作者: 张涛的狂怒    时间: 2014-8-6 00:29
对,在执行的时候
作者: 张涛的狂怒    时间: 2014-8-6 00:31
fxwb2005 发表于 2014-8-6 00:23
你所说的实例方法指的是run?

就是在执行的时候,能不能调用其他的方法,同步的,或不同步的
作者: fantacyleo    时间: 2014-8-6 00:39
第一个问号:不可以。一个对象的所有同步实例方法用的都是同一把锁,给了一个线程,其他线程就必须等
第二个问号:可以。非同步就是无锁,无锁当然随意访问
作者: fxwb2005    时间: 2014-8-6 00:48
张涛的狂怒 发表于 2014-8-6 00:31
就是在执行的时候,能不能调用其他的方法,同步的,或不同步的

你可以在run方法里面调用其他的方法,利用判断让两个线程分别做不同的事,比如一个线程往数组里面放值,一个线程往外取值,不过你要确保操作共享数据的代码都实现了同步,而且使用同一个锁。
线程自己是不会去理会某个方法同步或不同步的,只要有拥有执行权,它都会去执行,但这样没有意义,前面同步后面不同步,还是会出现安全问题……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2