锁优化

耗尽温柔 提交于 2020-08-13 02:39:10

1.偏向锁:

偏向于第一个访问锁的线程,同个线程可以直接获得锁继续运行下去。

如果在运行过程中只有一个线程会访问,那么就不需要进行同步操作,这时候会给这个线程加个偏向锁。
而当有另外的线程同样想获取锁时,获取失败就会将偏向锁升级为轻量级锁。
ps:在有锁竞争的情况下,偏向锁会做很多额外操作降低性能,所以只有当没什么多线程的情况下再启动偏向锁。

2.轻量级锁:

在对象头中CAS尝试保存指向线程的指针,失败了就用自旋重新尝试,如果一直失败或又有线程尝试争抢锁,锁就会升级为重量级。

ps:此时失败并不会阻塞而是自旋重新尝试。

3.重量级锁:

就是以前的同步锁,一个线程获得锁,其他线程会被阻塞直到锁被释放后唤醒。

java同步锁优化方案学习笔记(偏向锁,轻量级锁,自旋锁,重量级锁)
synchronized原理分析及自旋锁、偏向锁、轻量级锁和重量级锁的概念和优化

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!