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

相关推荐
可可南木1 分钟前
BT-Basic函数之首字母T
开发语言·测试工具·pcb工艺
慕离桑17 分钟前
HTML语言的数据可视化
开发语言·后端·golang
搬砖的阿wei19 分钟前
Matplotlib:数据可视化的艺术与科学
python·信息可视化·matplotlib
我命由我1234522 分钟前
C++ - 头文件基础(常用标准库头文件、自定义头文件、头文件引入方式、防止头文件重复包含机制)
服务器·c语言·开发语言·c++·后端·visualstudio·visual studio code
船长@Quant31 分钟前
Airflow量化入门系列:第四章 A股数据处理与存储优化
python·量化交易·airflow·dask·工作流编排·ta-lib·vectorbt
灿烂的贝壳34 分钟前
【算法实践】算法面试常见问题——数组的波浪排序
python·算法·排序算法·波浪序
云隐智者36 分钟前
如何通过Python实现自动化任务:从入门到实践
python
能来帮帮蒟蒻吗38 分钟前
GO语言学习(17)Gorm的数据库操作
开发语言·学习·golang
云隐智者40 分钟前
从零开始构建一个简单的Web爬虫:Python实战教程
python
豆芽8191 小时前
决策树(DecisionTree)
python·决策树·机器学习·pyqt·sklearn