A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张涛的狂怒 于 2014-8-6 10:12 编辑

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

6 个回复

倒序浏览
你所说的实例方法指的是run?
回复 使用道具 举报
对,在执行的时候
回复 使用道具 举报
fxwb2005 发表于 2014-8-6 00:23
你所说的实例方法指的是run?

就是在执行的时候,能不能调用其他的方法,同步的,或不同步的
回复 使用道具 举报
第一个问号:不可以。一个对象的所有同步实例方法用的都是同一把锁,给了一个线程,其他线程就必须等
第二个问号:可以。非同步就是无锁,无锁当然随意访问

点评

第一个应该是可以的,他没有说两个线程需要同时调用。  发表于 2014-8-6 00:53
回复 使用道具 举报
张涛的狂怒 发表于 2014-8-6 00:31
就是在执行的时候,能不能调用其他的方法,同步的,或不同步的

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