黑马程序员技术交流社区

标题: 线程synchronized问题 [打印本页]

作者: 王文辉    时间: 2015-7-2 10:47
标题: 线程synchronized问题
当一个线程进入一个对象的一个synchronized方法后,其它线程可不可以进入该对象的其它方法?
作者: 王文辉    时间: 2015-7-2 14:02
来人解答下:handshake
作者: sophitia    时间: 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3. 如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4. 如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。

作者: 王文辉    时间: 2015-7-6 13:52
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

有些抽象,我自己回味下
作者: zhuoxiuwu    时间: 2015-7-6 14:01
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

这个第四个 可以深入解释一下吗,,比如同步锁是当前类的字节码,这是什么意思
作者: 心在左边跳    时间: 2015-7-6 14:06
zhuoxiuwu 发表于 2015-7-6 14:01
这个第四个 可以深入解释一下吗,,比如同步锁是当前类的字节码,这是什么意思 ...

类.class。就是该类编译后的字节码文件。
作者: zhuoxiuwu    时间: 2015-7-6 14:08
心在左边跳 发表于 2015-7-6 14:06
类.class。就是该类编译后的字节码文件。

这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思
作者: samove    时间: 2015-7-6 14:10
好厉害,虽然还没学到,但先进来看看学学
作者: 心在左边跳    时间: 2015-7-6 14:10
zhuoxiuwu 发表于 2015-7-6 14:08
这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思

静态方法前面加synchronized,锁是该类本身,也就是字节码。非静态方法前面加synchronized,锁是this,也就是该类的实例。
作者: 心在左边跳    时间: 2015-7-6 14:12
zhuoxiuwu 发表于 2015-7-6 14:08
这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思

静态方法中不可能有this,静态进内存时,内存没有本类对象,但一定有该类对应的字节码文件对象。类名.class 该对象的类型是Class.
静态同步方法,使用的锁是该方法所在类的字节码文件对象,类名.class

作者: zhuoxiuwu    时间: 2015-7-6 14:24
心在左边跳 发表于 2015-7-6 14:12
静态方法中不可能有this,静态进内存时,内存没有本类对象,但一定有该类对应的字节码文件对象。类名.clas ...

感谢,理解了、:handshake
作者: 虾米吃螃蟹    时间: 2015-7-6 16:14
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

总结的很全




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