240 发简信
IP属地:浙江
  • 因为线程t1第一次更新成功会将自己的lock record对象锁的mark word进行交换
    重点是lock lock record的最后两位状态位是00(代表轻量级锁),mark word后两位是01(无锁)。换完之后,mark word就变成了00(轻量级锁)。
    当t1第二次重入获取该锁时先看mark word状态位是00,说明已经有人加轻量级锁了,交换失败。然后还要判断一下呀,这个人是不是我自己啊,然后检查一下mark word是不是指向自己。
    不知道这样解释的清不清楚。

    java对象头MarkWord探索

    关于java对象头markword的文章有很多,基本都是说markword用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁...