类型
自旋锁
由于线程阻塞和唤醒要从用户态转到核心态,<br>消耗大量CPU资源,所以引入自旋锁。<br>其循环检测,不进入线程挂起或睡眠状态
JDK1.6<br>默认10次
优化:<br>适应性自旋锁<br>
上次成功,下次自旋次数增加<br>上次失败,下次自旋次数减小
偏向锁
场景:单线程
实现:在置换ThreadID的时候依赖一次CAS原子指令
释放:只有竞争才会释放,<br>线程不会主动释放。<br>撤销需要等待全局安全点
轻量级锁
目的:在没有多线程竞争的前提下,<br>减少传统的重量级锁使用操作系统互斥量产生的性能消耗
场景:线程交替执行同步块的情况,<br>如果存在同一时间访问同一锁的情况,<br>必然就会导致轻量级锁膨胀为重量级锁。
注:有多线程竞争的情况下,<br>轻量级锁比重量级锁更慢
重量级锁
定义:依赖于操作系统Mutex Lock所实现的锁,<br>称之为 “重量级锁”