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

相关推荐
风逸hhh5 分钟前
python打卡day29@浙大疏锦行
开发语言·前端·python
浩皓素8 分钟前
深入理解For循环及相关关键字原理:以Python和C语言为例
c语言·python
英英_11 分钟前
详细介绍一下Python连接MySQL数据库的完整步骤
数据库·python·mysql
ᖰ・◡・ᖳ21 分钟前
JavaScript:PC端特效--缓动动画
开发语言·前端·javascript·css·学习·html5
水花花花花花26 分钟前
GloVe 模型讲解与实战
python·深度学习·conda·pip
C_VuI28 分钟前
如何安装cuda版本的pytorch
人工智能·pytorch·python
Star abuse31 分钟前
机器学习基础课程-6-课程实验
人工智能·python·机器学习
hy____12335 分钟前
C++多态的详细讲解
开发语言·c++
小葡萄20251 小时前
黑马程序员C++2024版笔记 第0章 C++入门
开发语言·c++·笔记
万物此臻1 小时前
C#编写软件添加菜单栏
开发语言·c#