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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一个线程进入一个对象的一个Synchronized方法后,其他线程是否可进入此对象的其他方法?

5 个回复

倒序浏览
如果只是方法同步,那么是可以访问别的方法的,如果是整个对象都在同步代码块中就不行了
回复 使用道具 举报
可以,不用谢。。。
回复 使用道具 举报
本帖最后由 王钊 于 2013-2-16 11:07 编辑

Java中的每个对象都有一个锁(lock),当访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任线程都无法去访问该synchronized方法了,
直到之前的那个线程执行方法完毕后(或者是抛出了异常),那么将该对象的锁释放掉,其他线程才有可能再去访问该synchronized方法。
如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到了某个synchronized方法,那么在该方法没有执行完毕前,其他线程是无法访问该对象的
任何synchronized方法的。
回复 使用道具 举报
本帖最后由 李培根 于 2013-2-16 12:35 编辑

这个要分情况讨论的。
1.其他方法是否有同步,如果没有就能进。
2.如果有同步的话,注意静态函数的锁是类名.class,非静态函数的锁是this。静态和非静态不能同步。
3.如果方法内部调用了wait或者await,释放了锁可以进入其他同步的方法。
回复 使用道具 举报
如果其他方法不是静态方法而且也用synchronized修饰了,那么就必须等待第一个方法执行完以后才能调用。如果其它方法没有用Synchronized修饰就可以访问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马