黑马程序员技术交流社区
标题:
关于线程同步的问题?
[打印本页]
作者:
孔斌
时间:
2013-2-4 11:09
标题:
关于线程同步的问题?
当一个线程进入另一个对象的一个
synchronized
方法后,那么其它线程是否可进入此对象的其它方法呢
?
作者:
散人online
时间:
2013-2-4 11:57
本帖最后由 散人online 于 2013-2-4 13:19 编辑
如果其它方法有加
synchronized关键字,是不可以的,他们用的锁都是this.
如果其它方法有加
synchronized关键字,并且这个其它方法是静态的,就可以
因为静态方法用的锁是类名.Class()字节码对象。锁不同。
如果没加没有锁当然可以。
作者:
宋朋山
时间:
2013-2-5 08:39
楼上无大误,我再详细说下:
一、主方法为非静态同步方法,则其他方法访问性为:
状态 是否静态 是否允许访问 主方法锁对象 其他方法锁方法
synchronized 是 true this className.class
synchronized 否 false this this
非synchronized 是或否 true this 无
二、主方法为静态同步方法,则其他方法访问性为:
状态 是否静态 是否允许访问 主方法锁对象 其他方法锁方法
synchronized 是 false className.class className.class
synchronized 否 true className.class this
非synchronized 是或否 true className.class 无
从以上可以看出,只要锁不同就可以进入。当锁相同时无法进入
作者:
刘凯
时间:
2013-2-5 09:20
只要不是同一个锁就可以 非静态同步函数的锁是当前对象也就是this 静态静态同步函数的锁是该类所对应字节码的对象 也就是类名.class 只要注意不是一个锁就可以了
作者:
walkonby
时间:
2013-2-5 09:49
你说的此对象是哪个对象呢?
如果是那个线程所在的对象的话 那其他线程是可以的 因为这个线程拿住的是这个对象的锁
如果说这个对象是这个线程正在访问的对象的话 其他线程访问要看会不会也访问你这个加了同步的方法 如果是访问其他没加同步的方法是没有影响的 当然如果是也是访问这个加了同步的方法那就得等了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2