畅读源码系列之J.U.C(三):从AQS源码解读开始(未完成...)

【引言】AQS=AbstractQueuedSynchronizer,字面意思我想可以理解为同步抽象队列,要分析java.util.concurrent的源码的话,AQS是绕不过去的一个基础类。


说在前面的话

  首先,我很无聊的特意看了一下,java version “1.8.0_131”的rt.jar这个包里的AbstractQueuedSynchronizer类,位于java.util.concurrent.locks这个package中,源码总行数2316行,从文件头到类定义处,占了288行,足见Doug Lea大神的注释写的多么的详细。
  我们来读这个源码,也并不是真的一行一行的像读课文一样,我们重点是要理解这个类的核心结构和其中一些核心方法是怎么实现的,层层递进,从一个入口撕开整个类的细枝末节。

从类定义说起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public abstract class AbstractQueuedSynchronizer
extends AbstractOwnableSynchronizer
implements java.io.Serializable {

// 【Lin.C】:队列头
private transient volatile Node head;

// 【Lin.C】:队列尾
private transient volatile Node tail;

// 【Lin.C】:同步状态位
private volatile int state;

// 【Lin.C】:当前占有锁的线程(继承自AbstractOwnableSynchronizer)
private transient Thread exclusiveOwnerThread;
......
}
------2019 Lin.C ------