1、测试类
static ReentrantLock lock = new ReentrantLock();
2、ReentrantLock类
public ReentrantLock() {
sync = new NonfairSync();
}
默认的构造函数里,创建了一个Sync,实现类是NonfairSync。
3、测试类,加锁
lock.lock();
4、ReentrantLock类
public void lock() {
sync.lock();
}
由此可见,ReentrantLock在加锁时,是直接基于底层的Sync来实现的l,ReentractLock类其实就是外层一个薄薄封装的类,Sync是ReentrantLock底层的核心组件。
5、ReentrantLock类中内部Sync类的定义。
abstract static class Sync extends AbstractQueuedSynchronizer
Sync是ReentrantLock中的静态内部类,继承于AbstractQueuedSynchronizer类( AQS),AQS是抽象队列同步器,是java并发包各种并发工具(锁、同步器)的底层核心组件。
6、AbstractQueuedSynchronizer类
属性Node,构造成一个双向链表,也就是我们说的队列。
state(核心变量,加锁、释放锁都是基于state来完成的)
7、总结
1)AQS,AbstractQueuedSynchronizer,抽象队列同步器。
2)NonfairSync是Sync的一个子类,覆盖重写了几个方法,没什么特别。
3)ReentractLock、synchronized(可重入加锁的:一个线程拿到一把锁是可以多次加锁的)-> AQS -> NonfairSync(非公平的同步组件)。
778

被折叠的 条评论
为什么被折叠?



