线程中的高逼格词汇

本文深入探讨Java内存模型中的final语义,解释其如何确保变量初始化后的可见性及防止指令重排序。同时,详细解析锁的内存语义,包括锁的四种状态:无状态锁、偏向锁、轻量级锁和重量级锁,以及JVM在锁释放和获取时的主内存与本地内存交互过程。此外,还介绍了synchronized关键字的作用机制和JDK对锁的优化措施,如逃逸分析、锁消除和锁粗化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final的内存语意是什么呢?
可以保证构造方法初始化完之后在继续往下进行
也是防止重排序,java的内存模型

锁的内存语意?
当线程释放锁的时候,JVM会把该线程对应的本地内存中的共享变量刷新到主内存中
当线程获取锁的时候,JVM会把该线程的本地内存置为无效,必须从主内存读取共享变量

当在打印的时候println,为什么能够读到共享变量,这个println底层也是使用的synchronized关键字
synchronized,可以使变量可见

synchronized的实现原理
使用monitorenter和monitorexit来实现的

锁的四种状态:
无状态锁,偏向锁,轻量级锁,重量级锁

自旋锁,cas操作,挂起会导致上下文一直切换,耗时。cas使线程等一等。
偏向锁,无竞争时,不需要进行cas操作。总是使同一个线程获得。

线程头里面有一个标致位,1,当存在线程竞争的情况下,1->0,变成轻量级锁。
当锁竞争失败的情况下, 线程阻塞,0->10.变成重量级别锁。

jdk对锁有哪些优化措施?
逃逸分析,锁消除,锁粗化

锁消除:在识别到没有用锁的情况下,自己干掉锁。自动
锁粗化:锁之间的合并。自动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

張義帥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值