来了解synchronized的锁策略前,需要先了解有什么类型的锁。
锁类型
锁之间的联系
synchronized的锁策略
自适应的意思是synchronized会根据锁冲突的情况来选择是变成轻量级锁还是重量级锁,乐观锁还是悲观锁,自旋锁还是挂起等待锁。
- synchronized是乐观锁或悲观锁,根据自适应决定
- synchronized是轻量级锁部分由自旋锁完成,重量级锁部分由挂起等待锁完成
- synchronized是自旋锁或挂起等待锁,根据自适应决定
- synchronized是非公平锁
- synchronized是互斥锁
- synchronized是可重入锁
synchronized优化过程(自适应过程)
synchronized的优化过程是根据内部判定锁竞争的激烈程度来决定的
- 无锁
- 偏向锁,真正意义上不算拥有锁,只是先标记,在没有其他线程来竞争前并没有真正上锁,但若真正到了有其他线程来竞争的时候,就会立马加上锁
- 轻量级锁,synchronized内部会判断锁竞争是否激烈,当锁竞争还不大激烈的时候就会上轻量级锁
- 重量级锁,synchronized判断竞争激烈时会变为重量级锁
其他的锁优化过程
StringBuffer类型内部是有synchronized的,但当判断到StringBuffer都是在同一线程中的时候,就不会加锁了。