当前位置: 首页 > ds >正文

使用反汇编指令javap查看synchronized实现原理

说明:synchronized是Java中实现进程同步的关键字,可以用于成员方法、静态方法或者代码块上,表示该方法或代码块同一时间只能被一个进程执行。

synchronized不像ReentrantLock,需要显式的加锁、释放锁,它是如何实现线程同步的呢,本文介绍如何使用Java自带的反汇编指令javap查看synchronized实现原理

Demo

先写个Demo,如下:

public class SynchronizedDemo {public void show() {synchronized (this) {System.out.println("这是一段同步代码");}}
}

编译,取出字节码(.class)文件

在这里插入图片描述

反汇编

在字节码文件所在的地方,打开命令窗,敲下面的命令

javap -c -v .\SynchronizedDemo.class

如下,是show()方法的内容

在这里插入图片描述

可以看到 synchronized 实现原理也是加锁、释放锁,值得注意的是,释放锁(monitorexit)执行了两遍,避免进程因异常中断,导致锁未释放。

http://www.xdnf.cn/news/13548.html

相关文章:

  • Keepalived 与 Nginx 高可用部署方案详解
  • 【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
  • ROS move base 简易调试
  • 使用智能表格做项目工时管理
  • 软件开发和嵌入式开发岗位的面试题
  • 【深尚想】SN74HCT244DWR缓冲器/驱动器TI逻辑芯片 电子元器件解析
  • 【题解】P1156 垃圾陷阱
  • “新京味”小柯音乐剧《三里屯42》 在小柯剧场6月全新开演
  • Oraclede 的体系结构
  • pycharm-continue插件久后使用的注意事项
  • Java是实现大根堆
  • Unreal从入门到精通之 碰撞响应 详解
  • 【JavaScript】 HTTP Cookie 核心知识梳理与常用的封装实现
  • 数字孪生城市崛起:智慧城市生态中的技术协同与治理变革
  • DSP使用三角函数问题
  • 卷积神经网络参数量计算
  • 常用ADB命令
  • AIGC 基础篇 Python基础 04 for循环与while循环
  • Java 语言特性(面试系列2)
  • 自动K码对齐
  • Kotlin基础语法一
  • float负数浮点值强转uint16_t
  • NIFI的处理器:ConsumeMQTT 2.4.0
  • 【Zephyr 系列 17】多协议网关实战:BLE + LoRa + UART + MQTT 综合调度系统设计与实现
  • CoW模式、线程的本地存储和生产者-消费者模式
  • 线程分离属性
  • 【Python】 -- 趣味代码 - 扫雷游戏
  • 使用obsutil工具在OBS上完成基本的数据存取【玩转华为云】
  • LLM 推理:LLM 路由和分层技术的表征和分析
  • 进行性核上性麻痹护理指南:全维度守护健康