偏向锁,轻量锁,重量锁

 

 

三种锁的优缺点对比

 

偏向锁的几个特点:

1、撤销偏向需要将持锁线程升级为轻量级锁,这个过程中所有线程需要暂停(STW)

2、偏向锁的对象头会记录当前线程的id

3、访问对象的hashcode也会撤销偏向锁,因为hashcode存在对象头中,占用了储存当前偏向线程id的位置

4、如果对象被多个线程访问,但没有竞争,偏向t1线程的对象仍然有可能偏向t2,重偏向会重置偏向的threadId

5、撤销偏向和重偏向都是批量执行的,以类为单位。

6、如果撤销偏向达到某个阈值,整个类的所有对象都会变为不可偏向的。

7、可以主动使用 -XX:-UseBiasedLocking禁用偏向锁

 

 synchronized锁升级一句话总结:先自旋,不行再阻塞

偏向锁:适用于单线程适用的情况,在不存在锁竞争的时候进入同步方法/代码块则使用偏向锁。
轻量级锁:适用于竞争较不激烈的情况(这和乐观锁的使用范围类似),存在竞争时升级为轻量级锁,轻量级锁采用的是自旋锁,如果同步方法/代码块执行时间很短的话,采用轻量级锁虽然会占用cpu资源但是相对比使用重量级锁还是更高效。
重量级锁:适用于竞争激烈的情况,如果同步方法/代码块执行时间很长,那么使用轻量级锁自旋带来的性能消耗就比使用重量级锁更严重,这时候就需要升级为重量级锁。

 

posted @   wwwwwwwty  阅读(164)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示