锁的升级过程

本文详细介绍了Java并发中的偏向锁和轻量级锁的概念及工作原理。偏向锁在无竞争时提高效率,而轻量级锁在多线程环境下通过CAS操作避免阻塞。当锁存在竞争时,两者会升级为重量级锁。关闭偏向锁可通过JVM参数实现。
摘要由CSDN通过智能技术生成

偏向锁
HotSpot 的作者 经过 研究 发现 ,大多数情况下, 不存在多 线 争,而且 是由同
线 程多次 得, 让线 的代价更低而引入了偏向 。当一个 线 访问 同步
锁时 ,会在 栈帧 中的 锁记录 里存 储锁 偏向的 线 ID ,以后 该线 程在 入和退出
同步 块时 不需要 CAS 操作来加 和解 ,只需 简单 测试 一下 Mark Word 里是否
着指向当前 线 程的偏向 。如果 测试 成功,表示 线 程已 经获 得了 。如果 测试
要再 测试 一下 Mark Word 中偏向 标识 是否 置成 1 (表示当前是偏向 ):如果没有 置,
使用 CAS ;如果 置了, 则尝试 使用 CAS 的偏向 指向当前 线 程。
1 )偏向 的撤
偏向 使用了一种等到 争出 的机制,所以当其他 线 尝试竞 争偏向 锁时
持有偏向 线 程才会 。偏向 的撤 ,需要等待全局安全点(在 时间 点上没有正
行的字 节码 )。它会首先 有偏向 线 程,然后 检查 持有偏向 线 程是否活着,
如果 线 程不 于活 头设 置成无 ;如果 线 程仍然活着, 有偏向
会被 行,遍 偏向 象的 锁记录 中的 锁记录 Mark Word 要么重新偏向于其他
线 程,要么恢复到无 或者 标记对 象不适合作 偏向 ,最后 停的 线 程。 2-1 中的 线
1 演示了偏向 初始化的流程, 线 2 演示了偏向 的流程。
2 )关 偏向 偏向 Java 6 Java 7 里是默 启用的,但是它在 用程序启 几秒 之后才激活,如 有必要可以使用JVM 参数来关 -XX:BiasedLockingStartupDelay=0 。如果你确定 用程 序里所有的锁 通常情况下 争状 ,可以通 JVM 参数关 偏向 -XX:- UseBiasedLocking=false,那么程序默 级锁

 

轻量级锁
1 级锁
线 程在 行同步 之前, JVM 会先在当前 线 程的 栈桢 建用于存 储锁记录 的空 ,并
中的 Mark Word 复制到 锁记录 中,官方称 Displaced Mark Word 。然后 线 尝试 使用
CAS 中的 Mark Word 换为 指向 锁记录 的指 。如果成功,当前 线 ,如果失
,表示其他 线 ,当前 线 程便 尝试 使用自旋来
2 级锁
锁时 ,会使用原子的 CAS 操作将 Displaced Mark Word 回到 ,如果成
功, 表示没有 生。如果失 ,表示当前 存在 争, 就会膨 成重量 级锁 2-2
两个 线 程同 夺锁 的流程

锁的优缺点对比

 

synchronized是Java中的关键字,用于实现线程同步,保证多个线程访问共享资源时的互斥和可见性。synchronized锁升级过程是指在Java虚拟机中,synchronized在不同情况下使用的的类型会发生变化,从无状态到偏向、再到轻量级、最后到重量级,这个过程被称为锁升级。 具体来说,升级过程如下: 1. 无状态:当没有线程竞争同步资源时,处于无状态,线程可以自由地进入和退出同步块,不需要任何同步机制。 2. 偏向状态:当只有一个线程访问同步资源时,此时该线程会尝试获取偏向,如果获取成功,则标记该线程ID,并将对象头的标志位设置为偏向。此时,该线程再次进入同步块时,无需进行同步操作,直接进入即可,从而提高了性能。 3. 轻量级状态:当存在多个线程竞争同步资源时,此时偏向失效,线程会尝试使用CAS(Compare and Swap)操作将对象头中的标志位由偏向转换为轻量级,如果转换成功,当前线程会将对象头复制一份到线程栈的记录中,并在对象头中存储指向线程栈中记录的指针。此时,其他线程访问同步资源时,需要通过自旋等待轻量级的释放,以获取该。 4. 重量级状态:当自旋等待超过一定次数或者线程数超过一定阈值时,会从轻量级状态升级为重量级状态,此时获取该的线程会被挂起,等待被释放后再次竞争。 总的来说,升级过程是为了在不同的场景下使用不同的来提高性能和效率,但需要注意的是,升级过程会带来额外的开销,因此需要根据具体场景进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值