码迷,mamicode.com
首页 > 其他好文 > 详细

Synchronized优化

时间:2019-10-11 01:16:44      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:syn   bsp   monit   失败   strong   成功   mon   互斥锁   线程   

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

 

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

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

Synchronized优化

标签:syn   bsp   monit   失败   strong   成功   mon   互斥锁   线程   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!