黑马程序员技术交流社区
标题:
一个线程进入一个对象的一个Synchronized方法后,其他线程是...
[打印本页]
作者:
袭喜悦
时间:
2013-2-16 00:18
标题:
一个线程进入一个对象的一个Synchronized方法后,其他线程是...
一个线程进入一个对象的一个Synchronized方法后,其他线程是否可进入此对象的其他方法?
作者:
李东城
时间:
2013-2-16 00:34
如果只是方法同步,那么是可以访问别的方法的,如果是整个对象都在同步代码块中就不行了
作者:
罗海清
时间:
2013-2-16 10:43
可以,不用谢。。。
作者:
王钊
时间:
2013-2-16 11:04
本帖最后由 王钊 于 2013-2-16 11:07 编辑
Java中的每个对象都有一个锁(lock),当访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任线程都无法去访问该synchronized方法了,
直到之前的那个线程执行方法完毕后(或者是抛出了异常),那么将该对象的锁释放掉,其他线程才有可能再去访问该synchronized方法。
如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到了某个synchronized方法,
那么在该方法没有执行完毕前,其他线程是无法访问该对象的
任何synchronized方法的。
作者:
李培根
时间:
2013-2-16 12:24
本帖最后由 李培根 于 2013-2-16 12:35 编辑
这个要分情况讨论的。
1.其他方法是否有同步,如果没有就能进。
2.如果有同步的话,注意静态函数的锁是类名.class,非静态函数的锁是this。静态和非静态不能同步。
3.如果方法内部调用了wait或者await,释放了锁可以进入其他同步的方法。
作者:
顾传文
时间:
2013-2-18 16:09
如果其他方法不是静态方法而且也用synchronized修饰了,那么就必须等待第一个方法执行完以后才能调用。如果其它方法没有用Synchronized修饰就可以访问。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2