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