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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王文辉 中级黑马   /  2015-7-2 10:47  /  651 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当一个线程进入一个对象的一个synchronized方法后,其它线程可不可以进入该对象的其它方法?

11 个回复

倒序浏览
来人解答下:handshake
回复 使用道具 举报
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3. 如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4. 如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。
回复 使用道具 举报
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

有些抽象,我自己回味下
回复 使用道具 举报
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

这个第四个 可以深入解释一下吗,,比如同步锁是当前类的字节码,这是什么意思
回复 使用道具 举报
zhuoxiuwu 发表于 2015-7-6 14:01
这个第四个 可以深入解释一下吗,,比如同步锁是当前类的字节码,这是什么意思 ...

类.class。就是该类编译后的字节码文件。
回复 使用道具 举报 1 0
心在左边跳 发表于 2015-7-6 14:06
类.class。就是该类编译后的字节码文件。

这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思
回复 使用道具 举报
samove 来自手机 中级黑马 2015-7-6 14:10:19
8#
好厉害,虽然还没学到,但先进来看看学学
回复 使用道具 举报
zhuoxiuwu 发表于 2015-7-6 14:08
这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思

静态方法前面加synchronized,锁是该类本身,也就是字节码。非静态方法前面加synchronized,锁是this,也就是该类的实例。
回复 使用道具 举报
zhuoxiuwu 发表于 2015-7-6 14:08
这个我是知道的,我是不理解 同步锁是当前类的字节码 这个意思

静态方法中不可能有this,静态进内存时,内存没有本类对象,但一定有该类对应的字节码文件对象。类名.class 该对象的类型是Class.
静态同步方法,使用的锁是该方法所在类的字节码文件对象,类名.class
回复 使用道具 举报
心在左边跳 发表于 2015-7-6 14:12
静态方法中不可能有this,静态进内存时,内存没有本类对象,但一定有该类对应的字节码文件对象。类名.clas ...

感谢,理解了、:handshake
回复 使用道具 举报
sophitia 发表于 2015-7-2 15:19
1. 其他方法前是否加了synchronized关键字,如果没加,则能。
2. 如果这个方法内部调用了wait,则可以进入 ...

总结的很全
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马