- 自旋锁
- 自适应自旋锁
- 锁消除
- 锁粗化
- 轻量级锁
- 偏向锁
在很多应用上,共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和恢复线程并不值得
锁消除的主要判定依据来自于逃逸分析的数据支持,如果判断一段代码中,堆上的所有数据都不会逃逸出去被其他线程访问,那就可以把他们当做栈上数据对待,认为是线程私有的,不进行同步加锁。
连续对同一对象反复加锁和解锁,会导致不必要的性能消耗
“轻量级”是相对于使用操作系统互斥量来实现的传统锁而言,传统的锁叫“重量级锁”
在没有多线程竞争的前提下,能减少传统的重量级锁使用产生的性能消耗。轻量级锁所适应的场景是线程交替执行同步块的情况,如果存在同一时间多个线程访问同一锁的情况,就会导致轻量级锁膨胀为重量级锁。