前言

——学习材料:java并发编程的艺术
上篇文章,就提到了synchronized和ReetrantLock等等,这篇文章就来较为详细的说说锁.
* 在javaSE 1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态,偏向锁状态,轻量级锁状态,重量级状态.锁可以升级不可以降级
* 锁的状态保存在对象的头文件中,32位JVM的MarkWord默认存储结构如下图
多线程学习(二)-锁

偏向锁

  • 偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他线程获取,持有偏向锁的线程将永远不需要同步.
  • 获取锁过程:
    • 访问MarkWord偏向锁的标识是否设置为1,锁标志物是否为01,确认为可偏向状态
    • 若为可偏向状态,检查对象头中是否存储了当前线程,若是, 执行同步代码, 否则,进入下一步
    • 通过cas竞争锁,若竞争成功 ,则将MarkWord中的线程ID指向自己.然后同步代码,否则,进入下一步
    • 若cas竞争失败,表示有竞争,当到达

相关文章:

  • 2021-11-08
  • 2022-02-07
  • 2021-11-25
  • 2022-01-21
  • 2022-02-18
  • 2021-12-13
  • 2022-02-07
  • 2021-09-30
猜你喜欢
  • 2021-07-30
  • 2022-01-09
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2021-04-10
  • 2022-12-23
相关资源
相似解决方案