一、ReentrantLock 的介绍
ReentrantLock 重入锁,是实现 Lock 接口的一个类,也是在实际编程中使用频率很高的
一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取
不会被阻塞。
在 java 关键字 synchronized 隐式支持重入性(关于 synchronized 可以看这篇文章) ,
synchronized 通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock 还支持
公平锁和非公平锁两种方式。
那么,要想完完全全的弄懂 ReentrantLock 的话,主要也就是 ReentrantLock 同步语义的
学习:重入性的实现原理; 公平锁和非公平锁。
二、重入性的实现原理
要想支持重入性,就要解决两个问题:
在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功; 由于
锁会被获取 n 次,那么只有锁在被释放同样的 n 次之后,该锁才算是完全释放成功。
通过这篇文章,我们知道,同步组件主要是通过重写 AQS 的几个 protected 方法来表达
自己的同步语义。针对第一个问题,我们来看看 ReentrantLock 是怎样实现的,以非公平锁
为例,判断当前线程能否获得锁为例,核心方法为 nonfairTryAcquire:
评论0