初次执行到synchronized代码块的时候,锁对象变成偏向锁(通过CAS修改对象头里的锁标志位),字面意思是“偏向于第一个获得它的线程”的锁。执行完同步代码块后,线程并不会主动释放偏向锁。当第二次到达同步代码块时,线程会判断此时持有锁的线程是否就是自己(持有锁的线程ID也在对象头里),如果是则正常往下执行。由于之前没有释放锁,这里也就不需要重新加锁。如果自始至终使用锁的线程只有一个,很明显偏向锁几乎没有额外开销,性能极高。
原文链接:https://blog.youkuaiyun.com/qq_46388795/article/details/106586704
锁的升级与synchronized锁的关系
最新推荐文章于 2024-08-14 03:30:33 发布
本文解析了Java中偏向锁的工作原理:偏向锁在第一次被线程获取时通过CAS设置对象头的锁标志位,之后若同一线程再次获取锁,则直接进入同步代码块执行,避免了重复加锁与解锁操作,极大提升了单线程执行效率。
316

被折叠的 条评论
为什么被折叠?



