1, 背景: 加锁 (重量级锁) 是一种阻塞期待的行为, 在某些场景下, 能够用别的计划来代替阻塞, 晋升 cpu 利用率, 让 cpu 不必在那闲着
2, 重入锁场景: 某线程在持有某锁时, 再次申请该锁, 这种场景下, 产生了 偏差锁. 偏差锁是第一次桎梏时的锁的类型. 这个第一步的逻辑是, 从锁对象头的 mark word 里判断以后锁是否偏差锁, 且持有锁的线程是否以后线程, 如果是, 则锁胜利. 如果否, 则批改 mark word 里的锁类型 , 改为轻量级锁
3, 当获取到锁之后执行的工作耗时较低时, 比方对某个变量自增, 其余的竞争锁能够让 cpu 循环屡次尝试竞争锁, 这个行为就是自旋, 此时的锁类型 是轻量级锁.
4, 当获取到锁之后执行的工作耗时较高时, 其余线程自旋肯定次数后, 发现依然没取得锁, 此时, 就将 mark word 里的锁类型升级成 重量级锁. 从此, 有线程想竞争该锁, 只有 CAS 竞争失败, 就只能阻塞了.
参考:https://blog.csdn.net/qq_45795744/article/details/123493673?s…