随着竞争情况逐渐升级,锁可以升级但不能降级。
锁一共四种状态,低-->高 无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。
偏向锁:
优点:加锁和解锁不需要额外的消耗,和执行非同步方法相逼仅存在纳秒级的差距。
缺点:如果线程间存在锁竞争,会带来额外的锁撤销的消耗(适用只有一个线程访问同步块场景)
轻量级锁:
优点:竞争的线程不会阻塞,提高了程序的响应速度
缺点:如果始终得不到锁竞争的线程会自旋消耗CPU (追求响应时间,同步块执行速度非常快)
重量级锁:
优点:线程竞争不使用自旋,不会消耗CPU
缺点:线程阻塞,响应时间缓慢 (追求吞吐量,同步块执行速度较长)