synchronized特点
1.开始时是乐观锁,如果锁冲突频繁,就转换成了悲观锁
2.开始时是轻量级锁,如果锁被持有的时间较长,就转换为重量级锁
3.实现轻量锁的时候,大概率用的是自旋锁策略
4.是互斥锁
5.是可重入锁
6.是非公平锁
synchronized锁机制
synchronized的关键策略:锁升级
偏向锁:只是想让线程针对锁有个标记(非常轻量)
如果真个代码执行的过程中,都没有遇到别的线程和它竞争这个锁,就不用进行加锁了
但是一旦要是有别的线程尝试来竞争这个锁,偏向锁就立即升级成真的锁(轻量级锁),此时别的线程只能等待
既保证了效率又保证了线程安全