栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

从字节码角度分析synchronized实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从字节码角度分析synchronized实现

①. 反编译:javap -c 或javap -v   xxx.class

②. synchronized有三种应用方式

作用于实例方法,当前实例加锁,进入同步代码前要获得当前实例的锁
作用于代码块,对括号里配置的对象加锁
作用于静态方法,当前类加锁,进去同步代码前要获得当前类对象的锁
③. synchronized同步代码块
1.实现使用的是monitorenter和monitorexit指令

 一定是一个enter和两个exit吗?
(不一定,如果方法中直接抛出了异常处理,那么就是一个monitorenter和一个monitorexit)

④. synchronized普通同步方法
(调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置,如果设置了,执行线程会将先持有monitor然后再执行方法,最后再方法完成(无论是正常完成还是非正常完成)时释放minotor)

⑤. synchronized静态同步方法
(ACC_STATIC、ACC_SYNCHRONIZED访问标志区分该方法是否静态同步方法)

③. 反编译synchronized锁的是什么
①. 任何一个对象都可以成为一个锁,在HotSpot虚拟机中,monitor采用ObjectMonitor实现

②. 上述C++源码解读

ObjectMonitor.java — ObjectMonitor.cpp — ObjectMonitor.hpp
ObjectMonitor.hpp(底层源码解析)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960623.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号