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

相关推荐
zbhbbedp282793cl10 小时前
如何在VSCode中安装Python扩展?
ide·vscode·python
ᐇ95911 小时前
Java LinkedList集合全面解析:双向链表的艺术与实战
java·开发语言·链表
码银11 小时前
【数据结构】顺序表
java·开发语言·数据结构
Python私教12 小时前
Python 开发环境安装与配置全指南(2025版)
开发语言·python
百锦再12 小时前
第12章 测试编写
android·java·开发语言·python·rust·go·erlang
无敌最俊朗@12 小时前
C++ 并发与同步速查笔记(整理版)
开发语言·c++·算法
熠熠仔12 小时前
QGIS 3.34+ 网络分析基础数据自动化生成:从脚本到应用
python·数据分析
测试199813 小时前
Appium使用指南与自动化测试案例详解
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
Elastic 中国社区官方博客13 小时前
Observability:适用于 PHP 的 OpenTelemetry:EDOT PHP 加入 OpenTelemetry 项目
大数据·开发语言·人工智能·elasticsearch·搜索引擎·全文检索·php
csbysj202013 小时前
PHP 魔术常量
开发语言