多线程锁-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"锁"事 · 语雀

相关推荐
Ai财富密码19 分钟前
【Python教程】CentOS系统下Miniconda3安装与Python项目后台运行全攻略
开发语言·python·numpy
大数据魔法师24 分钟前
豆瓣图书数据采集与可视化分析(四)- 豆瓣图书数据可视化(Pyecharts)
python·数据分析·数据可视化
xiaowu08026 分钟前
C# 中的Async 和 Await 的用法详解
java·开发语言·c#
范纹杉想快点毕业31 分钟前
初探Qt信号与槽机制
java·c语言·开发语言·c++·qt·visualstudio·visual studio
databook38 分钟前
掌握ChangeSpeed类:让数学动画速度随心而动!
python·动效
水花花花花花40 分钟前
蓝桥杯国赛前一晚知识点准备(十六届python)
前端·javascript·python
CS创新实验室1 小时前
CPython 局部变量存储机制:从 “栈上存储“ 看语言实现差异
python···cpython·局部变量
Python当打之年1 小时前
【61 Pandas+Pyecharts | 基于Apriori算法及帕累托算法的超市销售数据分析可视化】
python·信息可视化·数据分析·pandas·数据可视化
苏三福1 小时前
yolo11-seg 推理测试infer
python·opencv·计算机视觉
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO1 小时前
Magentic-ui项目相关整理
开发语言·javascript·ui