无锁 0|01 偏向锁 1|01 轻量级锁 00 重量级锁 10 加锁 轻量级锁加锁的的前提是无锁或者不能带有偏向条件。 1、无锁可以直接加锁,关于markword的初始状态0|01 1、1 在当前线程的栈帧中创建锁记录 1、2 将锁对象中的markword复制到锁记录中 1、3 通过CAS方式将markword设置成指向锁记录的指针。 2、有锁状态下 2、1如果是当前线程持有的轻量级锁,说明是可重入锁,由于每次获取轻量级锁都会创建一个锁记录,所以,除第一次锁记录存储markword外,后面均设置为null。 2、2如果不是当前线程持有的锁,说明出现锁竞争,可能需要锁升级。 解锁 使用cas原子的将锁记录中的markword复制到锁对象中,如果成功,则代表解锁成功。如果失败则膨胀成重量级锁之后在解锁。 关于锁重入解锁 如果判断Displaced Mark Word == null,则代表是可重入锁的解锁,makword不需要复制到锁对象中
轻量级锁加锁解锁过程
最新推荐文章于 2024-05-12 23:32:40 发布