深入理解Java虚拟机 Chapter13

线程安全

当多个线程访问一个对象时,如果不考虑这些线程在执行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的

  1. 不可变

  2. 绝对线程安全

  3. 相对线程安全

  4. 线程兼容

  5. 线程对立

锁优化

HotSpot虚拟机对象头Mark Word

存储内容 标志位 状态
对象哈希码、对象分代年龄 01 未锁定
指向锁记录的指针 00 轻量级锁定
指向重量级锁的指针 10 膨胀(重量级锁定)
空,不需要记录信息 11 GC标记
偏向线程ID、偏向时间戳、对象分代年龄 01 可偏向

偏向锁、轻量级锁的状态转化及对象Mark Word的关系

jvm-lock-mark-word-min-min