java锁的概念
参考文档
探究分布式并发锁
并发编程-锁的发展和主流分布式锁比较总结
从构建分布式秒杀系统聊聊分布式锁
探索并发编程(六)------Java多线程性能优化
java线程(2)--同步和锁
Java并发编程:Lock
深入理解多线程(一)——Synchronized的实现原理
深入理解多线程(五)—— Java虚拟机的锁优化技术
Java锁Synchronized,对象锁和类锁举例 --值得理解
说明:从资料上看到的锁分类,拿过来整理分享大家看,感谢原创!!
一、锁概念
1、自旋锁 :自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁
2、阻塞锁: 被阻塞的线程,不会争夺锁。
3、可重入锁: 多次进入该锁的域
4、读写锁:
5、互斥锁: 锁本身就是互斥的
6、悲观锁: 不相信,这里会是安全的,必须全部上锁
7、乐观锁: 相信,这里是安全的。
8、公平锁: 有优先级的锁
9、非公平锁: 无优先级的锁
10、偏向锁: 无竞争不锁,有竞争挂起,转为轻量锁
11、对象锁: 锁住对象
12、线程锁:
13、锁粗化: 多锁变成一个,自己处理
14、轻量级锁: CAS 实现
15、锁消除: 偏向锁就是锁消除的一种
16、锁膨胀: jvm实现,锁粗化
17、信号量: 使用阻塞锁 实现的一种策略
二、锁的类别
1. 类锁:
在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class)的代码段;
2.对象锁:
在代码中的方法上加了synchronized的锁,或者synchronized(this)的代码段;
3.私有锁:
在类内部声明一个私有属性如private Object lock,在需要加锁的代码段synchronized(lock)。
三、锁的四种状态
优化:
自旋锁,锁消除,锁粗化
状态:
从低到高,只能升级不能降级:
-
无锁状态:
-
偏向锁状态:
偏向锁的则是在无竞争的情况下,连CAS操作都不做 -
轻量级锁状态:
轻量级锁依据大部分的锁在同步周期内不存在竞争,使用CAS操作避免使用互斥量的开销 -
重量级锁状态:
重量级锁需要使用操作系统的互斥量(常常使用一个整型量,0表示解锁,而其他所有的值则表示加锁。通过互斥量使同一资源同时只允许一个访问者对其进行访问)来实现