简介
本文介绍Java的synchronized的锁的升级过程。
锁的升级是单向的:只能从低到高升级,不会出现锁的降级。
锁的升级过程
- JVM 有偏向锁启动延迟(默认是4秒)
- 若不考虑偏向锁的启动延迟,当仅有一个线程拿锁的时候,锁对象的状态是偏向锁状态
- 当多个线程拿锁的时候,若是交替拿锁不发生竞争或者发生竞争线程自旋的次数小于某阈值,偏向锁升级成轻量级锁。
- 自旋次数的默认值是10,可以通过-XX:PreBlockSpin来更改
- 当自旋的次数超过某阈值,轻量级锁升级成重量级锁。
锁的类型
偏向锁
乐观锁:通过CAS操作竞争锁。
轻量级锁
乐观锁:通过CAS操作竞争锁。
重量级锁
重量级锁是悲观锁,通过monitor实现,每一个锁对象都有且仅有一个自己的monitor对象。
请先
!