目录
- 概述
- 锁分类
- 按上锁方式划分
- 按特性划分
- 悲观锁/乐观锁
- 重入锁/不可重入锁
- 公平锁/非公平锁
- 独享锁/共享锁
- 其它
- 自旋锁
- 分段锁
- 无锁/偏向锁/轻量级锁/重量级锁
- 结束
概述
java
锁分类,虽是概念,很常见。
锁分类
按上锁方式划分
锁 | 关键字 | 解释 |
---|---|---|
隐式锁 | synchronized | 不需要显示加锁和解锁 |
显示锁 | juc包中提供的锁 | 需要显示加锁和解锁 |
按特性划分
悲观锁/乐观锁
按照线程在使用共享资源
锁 | 关键字 | 解释 |
---|---|---|
悲观锁 | juc锁,synchronized | |
乐观锁 | cas | 关系型数据库的版本号机制 |
重入锁/不可重入锁
按照同一个线程是否可以重复获取同一把锁,划分为重入锁和不可重入锁
- 重入锁:ReentrantLock、synchronized
- 不可重入锁:不可重入锁,与可重入锁相反,线程获取锁之后不可重复获取锁,重复获取会发生死锁。
公平锁/非公平锁
**按照多个线程竞争同一锁时需不需要排队,能不能插队,**划分为公平锁和非公平锁。
独享锁/共享锁
按照多个线程能不能同时共享同一个锁,锁划分为独享锁和共享锁。
独享锁和共享锁是不能同时存在的。
- 独享锁:独享锁也叫排他锁,synchronized、ReentrantLock、ReentrantReadWriteLock的WriteLock写锁
- 共享锁:ReentrantReadWriteLock的ReadLock读锁
其它
自旋锁
实现:CAS
分段锁
实现:ConcurrentHashMap
无锁/偏向锁/轻量级锁/重量级锁
- 这四个锁是synchronized独有的四种状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁
- 它们是jvm为了提高synchronized锁的获取与释放效率而做的优化
- 四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级。
结束
并发中的各种锁概念,至此就结束了,如有疑问,欢迎评论区留言。