ReentrantLock、AQS底层实现原理
ReentrantLock介绍:
在单线程情况下交替执行与队列无关,因为使用JDK级别解决同步问题。
可重入锁: 线程已经获取某个共享资源的锁之后,释放锁之前,当前线程还可以再次对于这个共享资源获取锁(锁计数器[state+1])。
在jdk1.6之前->ReentrantLock和Synchronized的区别:
ReentrantLock:一部分在JDK级别解决,一部分在OS(操作系统)的Api执行,可使用Condition(条件)锁
Synchronized【Jvm内置锁】:所有锁都在OS(操作系统)Api执行
ReentrantLock类图解析:
- ReentrantLock 实现 Lock 和 Serializable 接口
- ReentrantLock 内部类 Sync、NonfairSync 和 FairSync 类
Sync:继承 AbstractQueuedSynchronizer 抽象类
NonfairSync(非公平锁)与 FairSync(公平锁) : 继承 Sync 抽象类
java.util.concurrent(j.u.c) 基于AQS实现:
AQS核心三大板块:
- CAS
- 自旋
- LockSupport(park,unpark)
AQS核心源码分析:
https://www.processon.com/view/link/5e841dc6e4b0a2d87025a5af
文件可能比较大,加载的慢,请耐心等候......