接着讲轻量级锁。当有一个线程竞争获取锁时,由于该锁已经是偏向锁,当发现对象头 Mark Word 中的线程 ID 不是自己的线程 ID,就会进行 CAS 操作获取该锁。如果获取到了就替换线程 ID,继续保持偏向锁状态,如果获取不到就自旋一段时间再次获取,也就是自旋锁,如果在指定次数没有成功,就会膨胀为重量级锁,当前线程阻塞掉。默认次数好像是 15,当然,后面出了自适应自旋锁,会根据上次自旋的次数来设置。因为长时间的自旋会消耗 CPU,所以会有限制次数这一说。轻量级锁适用于线程交替执行同步块的场景,绝大部分的锁在整个同步周期都不存在长时间的竞争。