锁升级
线程的阻塞和唤醒需要CPU从用户态转为核心态,频繁的阻塞和唤醒对CPU来说是一件负担很重的工作,Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”。
无锁:(1)不存在竞争,不需要加锁;(2)存在竞争,通过诸如CAS这种方式,可以进行无锁编程。
偏向锁:获取到锁资源的线程,会优先让它再去获取到这个锁。针对不存在或很少存在资源竞争的情况下使用。
若没有获取到这个锁,就升级成一个轻量级锁,是一个CAS的锁,是一个乐观锁,CAS是一个比较与交换的过程,如果没有设置成功,它进行自旋,自旋到一定的次数之后才会升级成一个Synchronized的重量级锁。
链接: link.