synchronized升级降级
时间: 2023-09-27 22:07:51 浏览: 86
synchronized锁在使用过程中可以进行升级或降级。当一个线程竞争锁时,锁处于偏向锁的状态,此时如果其他线程没有竞争,锁可以一直保持偏向锁状态。当多个线程竞争不激烈时,锁会升级成轻量级锁,通过自旋循环来尝试获取锁,避免了线程的阻塞和唤醒操作,提高了性能。然而,当竞争变得激烈时,锁会进一步升级为重量级锁,此时会使用操作系统的互斥量来实现锁的操作,确保同一时间只有一个线程能够访问被保护的代码块。
在锁升级成重量级锁后,无法再降级为轻量级锁或偏向锁。一旦锁升级为重量级锁,它将一直保持在这个状态,直到被释放。这是因为重量级锁需要使用操作系统的互斥量来进行线程的阻塞和唤醒操作,这些操作是较为耗时的,为了避免频繁的升级和降级带来的性能损耗,JVM选择了不再进行降级操作。
关于synchronized锁升级的详细原理和实现细节,可以参考synchronizer.cpp/hpp文件,在这些文件中包含了JVM同步相关的基础逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [synchronized锁升级以后会再降级吗?](https://blog.csdn.net/goldenfish1919/article/details/131498051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Synchronized锁升级、降级](https://blog.csdn.net/m0_61802230/article/details/124891810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [synchronized底层如何实现?什么是锁的升级、降级?](https://blog.csdn.net/qq_44590469/article/details/129175293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文