美文网首页
JAVA synchronized锁升级

JAVA synchronized锁升级

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

2020-11-22

相关文章

网友评论

      本文标题:JAVA synchronized锁升级

      本文链接:https://www.haomeiwen.com/subject/okduiktx.html