JAVA synchronized锁升级

2021-03-04  本文已影响0人  周_0717
  1. 若对象为无锁状态,修改对象头中的锁状态为偏向锁,并在对象头中记录当前线程id;
  2. 若对象为偏向锁状态,检查对象头中的线程id是否与当前线程一致,如果一致则直接使用;
    如果不一致则尝试竞争;
  3. 检查对象头中记录的线程是否还存活,并继续持有当前对象:
    3.1. 若继续持有:升级为轻量级锁,自旋尝试获取对象;
    3.2. 若不存活或不再持有:修改对象为无锁状态,依照CAS规则尝试修改对象头内线程id为当前id,升级为偏向锁,获取对象;
  4. 轻量级锁自旋超过一定测试次数,或者自旋过程中有其他线程参与竞争,则升级为重量级锁;
  5. 重量级锁由monitor决定将对象分配哪个线程。

2020-11-22

上一篇 下一篇

猜你喜欢

热点阅读