-
偏向锁
在锁对象的对象头中记录下当前获取到锁的线程id,该线程下次获取锁则可以直接获取到。
2.轻量级锁
当一个线程获取到锁后,此时这把锁是偏向锁,如果有第二个线程来竞争锁,那么偏向锁会升级为轻量级锁,通过自旋来实现,不会阻塞线程。
3.重量级锁
如果轻量级锁自旋次数过多且仍未获取到锁,则升级为重量级锁,重量级锁会阻塞线程。
补充
锁的自旋:
线程在获取锁的过程中,不会去阻塞线程,也就没有所谓的唤醒线程,阻塞和唤醒这两个步骤都是需要通过操作系统去进行实现的,比较消耗时间。自旋锁是通过CAS来获取预期的一个标记,如果没有获取到则继续获取,直到获取到时则结束自旋,这个过程中线程一直在运行中,相对而言并没有占用太多操作系统资源,比较轻量。