synchronized在JDK1.6之后的底层优化

主要参考《深入理解Java虚拟机》和JavaGuide之JDK1.6之后的底层优化.md

无锁 -> 偏向锁 -> 轻量级锁 ->(自旋锁)-> 重量级锁

偏向锁的加锁

当一个线程访问同步块并获取锁时, 会在锁对象的对象头中的Mark Word里存储线程ID(通过CAS操作)。成功后,持有偏向锁的线程以后每次进入这个锁相关的同步块时,虚拟机都可以不再进行任何同步操作(例如加锁、解锁及对Mark Word的更新操作等),即不再CAS。

轻量级锁

使用轻量级锁时,不需要申请互斥量。轻量级锁的加锁和解锁都用到了CAS操作。

猜你喜欢

转载自blog.csdn.net/qq_23204557/article/details/114817804