Synchronized锁升级介绍

synchronized

早期属于重量级锁------需访问OS
后期改进,有了锁升级的概念

偏向锁

线程第一次进入时,只有一个线程,没有线程竞争,此时维护锁会有资源浪费,因此只需要通过MarkWord记录第一个线程的id,记录成功则获取锁成功,记录锁状态为偏向锁。之后若当前线程与记录线程id相同,就可以直接获得锁,否则说明有其它线程竞争,膨胀为轻量级锁

轻量级锁

当前争用线程与MarkWord记录线程id不一致时,争用线程通过CAS竞争机制自旋等待锁释放,若自旋期间锁被释放,争用线程获取锁成功,此时所有操作在CPU完成,锁状态为轻量级锁。若争用线程自旋期间获取锁失败,膨胀为重量级锁

重量级锁

争用线程自旋获取失败后,争用线程进入内存阻塞等待,阻塞线程不消耗CPU,但是阻塞或唤醒一个线程时,都需要操作系统的帮忙,涉及到用户态和内核态的切换,转换状态比较耗时,所以重量级锁开销较大

锁升级过程

无锁 --> 偏向锁 --> 轻量级锁 --> 重量级锁

应用场景

1)自旋锁

执行时间短(加锁代码)、线程数较少

2)重量级锁

执行时间长、线程数较多


未命名图片.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容