ReentrantLock类的源码

类的继承关系

image.png
ReentrantLock类实现了Lock和Serializable(序列化接口)接口,Lock接口的方法列表如下:
image.png
这几个接口的作用都是耳熟能详了,就不介绍了。
image.png

内部类

Sync类

image.png
Sync类实现了AQS,即是一个同步器,下面是这个类的常用方法:
image.png

FairSync类

image.png
FairSync继承了Sync内,其实就是ReentrantLock的公平锁实现。下面FairSync的加锁方法的源码:
image.png
可见调用其实就是AQS的核心方法acquire方法罢了。至于解锁方法,和非公平共用同一个方法:
image.png
调用的也是AQS的release方法。

NonfairSync类

image.png
NonfairSync其实就是ReeentrantLock的非公平锁的实现,与公平锁的区别就在于加锁方法:
image.png
具有参考:https://www.yuque.com/zhengzaijiazai-9byqp/xac6x1/vdr9bb#Nn3xT
image.png

类的属性

image.png
类的属性其实只要两个:“serialVersionUID”和“sync”,即序列版本号和同步器。

类的方法

类的构造方法

image.png
类的构造方法有两个,上图中第一个构造方法无参,默认采用非公平锁实现;第二个构造方法有参,传入true表示采用公平锁实现,false表示非公平锁实现。

核心方法

类的核心方法其实就是前面的realese和acquire方法,具体源码参考:https://www.yuque.com/zhengzaijiazai-9byqp/xac6x1/vdr9bb#YG6j9

ReentrantLock类的使用

ReentrantLock类的具体使用参考前面的文章:https://www.yuque.com/docs/share/a03d16d8-e8f4-4bc8-a9de-0b82e1060f30?# 《ReentrantLock的使用》