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

Synchronized升级到重量级锁会发生什么?

我们从网上看到很多,升级到重量锁的时候不会降级,再来线程都是重量级锁
今天我们来实验一把真的是这样的吗

1.首选导入Java对象内存布局的工具库:

 <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.14</version></dependency>

2.代码:

public class Test {static Object LOCK;public static void main(String[] args) throws InterruptedException {LOCK = new Object();System.out.println("无锁的时候对象布局:" + ClassLayout.parseInstance(LOCK).toPrintable());IntStream.rangeClosed(1, 4).forEach(i -> {getLOCK();});Thread.sleep(3000L);System.out.println("无竞争之后,此时对象布局:" + ClassLayout.parseInstance(LOCK).toPrintable());getLOCK();}public static void getLOCK() {new Thread(() -> {try {synchronized (LOCK) {System.out.println("线程[" + Thread.currentThread().getName() + "]" +"重量级锁状态对象布局:" + ClassLayout.parseInstance(LOCK).toPrintable());}} catch (Exception e) {e.printStackTrace();}}).start();}
}

3.结果
请添加图片描述
请添加图片描述

4.结论
从实验我们可以得知,升为重量级锁后,并不会一直是重量级锁,
一开始没有竞争的时候是无锁,然后四个线程来竞争的时候是重量级锁,释放锁之后又是无锁,再来一个线程变为轻量级锁

http://www.lryc.cn/news/403678.html

相关文章:

  • 【Webpack】HMR 热更新
  • 【计算机视觉】siamfc论文复现
  • PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化
  • pytest常用命令行参数解析
  • pgsql-使用dump命令制作数据库结构、数据快速备份bat脚本
  • 【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算
  • ICMP 和 IGMP 的区别
  • 【Vue3】工程创建及目录说明
  • 算法学习2——排序算法(2)
  • 嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)
  • python-NLP:1中文分词
  • iOS 开发包管理之CocoaPods
  • Windows搭建RTMP视频流服务器
  • VS2019安装MFC组件
  • Python学习—open函数,json与pickle知识点,Os模块详解
  • 基于SSM的高考志愿选择辅助系统
  • 引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini
  • 【考研数学】线代满分经验分享+备考复盘
  • Java项目:基于SSM框架实现的海鲜自助餐厅系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 前端面试题日常练-day97 【Less】
  • 压缩视频大小的方法 怎么减少视频内存大小 几个简单方法
  • JVM:GraalVM
  • 海外营销推广:快速创建维基百科(wiki)词条-大舍传媒
  • 【HarmonyOS】HarmonyOS NEXT学习日记:五、交互与状态管理
  • 处理uniapp刷新后,点击返回按钮跳转到登录页的问题
  • 工厂方法模式java
  • java模拟多ip请求【搬代码】
  • 微软史诗级的蓝屏
  • HALCON数据结构
  • 数据库系统概论:事务与并发一致性问题