首页 > 其他 > 详细

Synchronized优化

时间:2019-10-11 00:44:43      阅读:134      评论:0      收藏:0      [点我收藏+]

在jdk1.6之前,Monitor的实现完全是一句操作系统内部的互斥来实现的,当线程被挂起的时候,需要从用户态切换到内核,是重量级的操作

 

在1.6之后,对synchronized进行了优化操作,

JVM提供了三种不同的 Monitor 实现,也就是三种不同的锁:
偏向锁
轻量级锁
重量级锁
JVM根据不同的竞争状态自动切换不同的锁
 
1 无竞争出现  使用偏向锁
JVM 会使用 CAS 操作,在对象头的 Mark Word 部分设置线程 ID,以表示这个
对象偏向于当前线程,所以并不涉及真正的互斥锁。这样做是假设很多场景中,
大部分对象的生命周期中最多会被一个线程锁定,因此可以降低无竞争开销,让线程获得锁的代价更低。
2 当有线程试图锁定已经被设置偏向锁的对象,此时会撤销对象的偏向锁
如果有另外的线程试图锁定某个已经被偏向的对象,JVM 就需要撤销该对象的偏向锁,并升级到轻量级锁。
轻量级锁依赖 CAS 操作对象头中的 Mark Word 来试图获取锁,如果成功则获得锁
3 如果获取轻量级锁失败则尝试自旋重试,重试失败后,则表示当前锁存在竞争,就会升级到重量级锁。

Synchronized优化

原文:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11651390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!