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

文件可能比较大,加载的慢,请耐心等候……