1.偏向锁:
偏向于第一个访问锁的线程,同个线程可以直接获得锁继续运行下去。
如果在运行过程中只有一个线程会访问,那么就不需要进行同步操作,这时候会给这个线程加个偏向锁。
而当有另外的线程同样想获取锁时,获取失败就会将偏向锁升级为轻量级锁。
ps:在有锁竞争的情况下,偏向锁会做很多额外操作降低性能,所以只有当没什么多线程的情况下再启动偏向锁。
2.轻量级锁:
在对象头中CAS尝试保存指向线程的指针,失败了就用自旋重新尝试,如果一直失败或又有线程尝试争抢锁,锁就会升级为重量级。
ps:此时失败并不会阻塞而是自旋重新尝试。
3.重量级锁:
就是以前的同步锁,一个线程获得锁,其他线程会被阻塞直到锁被释放后唤醒。
java同步锁优化方案学习笔记(偏向锁,轻量级锁,自旋锁,重量级锁)
synchronized原理分析及自旋锁、偏向锁、轻量级锁和重量级锁的概念和优化
来源:oschina
链接:https://my.oschina.net/u/4527334/blog/4309045