偏向锁,轻量锁,重量锁
三种锁的优缺点对比
偏向锁的几个特点:
1、撤销偏向需要将持锁线程升级为轻量级锁,这个过程中所有线程需要暂停(STW)
2、偏向锁的对象头会记录当前线程的id
3、访问对象的hashcode也会撤销偏向锁,因为hashcode存在对象头中,占用了储存当前偏向线程id的位置
4、如果对象被多个线程访问,但没有竞争,偏向t1线程的对象仍然有可能偏向t2,重偏向会重置偏向的threadId
5、撤销偏向和重偏向都是批量执行的,以类为单位。
6、如果撤销偏向达到某个阈值,整个类的所有对象都会变为不可偏向的。
7、可以主动使用 -XX:-UseBiasedLocking禁用偏向锁
synchronized锁升级一句话总结:先自旋,不行再阻塞
偏向锁:适用于单线程适用的情况,在不存在锁竞争的时候进入同步方法/代码块则使用偏向锁。
轻量级锁:适用于竞争较不激烈的情况(这和乐观锁的使用范围类似),存在竞争时升级为轻量级锁,轻量级锁采用的是自旋锁,如果同步方法/代码块执行时间很短的话,采用轻量级锁虽然会占用cpu资源但是相对比使用重量级锁还是更高效。
重量级锁:适用于竞争激烈的情况,如果同步方法/代码块执行时间很长,那么使用轻量级锁自旋带来的性能消耗就比使用重量级锁更严重,这时候就需要升级为重量级锁。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)