多线程锁-synchronized字节码分析

从字节码角度分析synchronized实现

javap -c(v附加信息) ***.class 文件反编译

synchronized同步代码块

>>>实现使用的是monitorenter和monitorexit指令

synchronized普通同步方法

>>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置,如果设置了,执行线

程会将现持有monitor锁,然后再执行该方法,最后在方法完成(无论是否正常结束)时释放

monitor

synchronized静态同步方法

>>>ACC_STATIC、ACC_SYNCHRONIZED访问标志区分该方法是否是静态同步方法

反编译synchronized锁的是什么

面试题:为什么任何一个对象都可以成为一个锁?

C++源码:ObjectMonitor.java--->ObjectMonitor.cpp--->ObjectMonitor.hpp

每个对象天生都带着一个对象监视器,每一个被锁住的对象都会和Monitor关联起来

总结:指针指向Monitor对象(也称为管程或监视器)的真实地址。每个对象都存在着一个monitor

与之关联,当一个monitor被某个线程持有后,它便处于锁定状态。在Java虚拟机(HotSpot)中,

monitor是由OnjectMonitor实现的,其主要的数据结构如下(位于HotSpot虚拟机源码

ObjectMonitor.hpp文件,C++实现):

3. 说说Java"锁"事 · 语雀

相关推荐
Chen—LSN11 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
纪念 22911 小时前
C++类和对象(最终篇)
开发语言·c++
程序员yu11 小时前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
鬼手点金11 小时前
opencode组件详解-安装方式
人工智能·python·优化器·分析器·nanogpt
Bruce_Liuxiaowei11 小时前
Python 字典默认值完全指南:从 KeyError 到 defaultdict
开发语言·数据结构·python·字典
数据杂坛11 小时前
【Python程序开发系列】一文搞清楚Gunicorn以及和Nginx的区别
python·nginx·gunicorn
zjh90053011 小时前
Visual C++ 2010 安装使用完整包:高手秘籍
python
troy12811 小时前
Java 技术栈全景指南:从基础到微服务的完整知识体系
java·开发语言·微服务
Escalating_xu11 小时前
【C 语言】深入理解指针(2):数组名、数组传参、二级指针与指针数组
java·c语言·开发语言
郝学胜-神的一滴11 小时前
游戏引擎原理与实践 01:聊聊游戏引擎的前世今生
开发语言·c++·游戏引擎·产品运营·软件工程·产品经理·untiy