第一眼看到AbstractQueuedSynchronizer,通常都会有这几个问题。
- AbstractQueuedSynchronizer为什么要搞这么一个类?
- 这个类是干什么的、有什么用?
- 这个类的实现原理是什么?
下面我边学边教,来解答这3个问题。
问题一:AbstractQueuedSynchronizer产生的背景
AbstractQueuedSynchronizer 我这里用简写AQS表示。如果开发者想自己定义一个同步器怎么写?Java程序员用C++写个同步器不现实,这时如果有一个用来写同步器的Java类,就显得很不错。AQS在juc类库构建起了很大的作用。
继承关系
AbstractOwnableSynchronizer
public abstract class AbstractOwnableSynchronizer
implements java.io.Serializable {
/**
* Empty constructor for use by subclasses.
*/
protected AbstractOwnableSynchronizer() { }
/**
* The current owner of exclusive mode synchronization.
*/
//独占模式下的线程
private transient Thread exclusiveOwnerThread;
// getter、setter
protected final void setExclusiveOwnerThread(Thread thread) {
exclusiveOwnerThread = thread;
}
protected final Thread getExclusiveOwnerThread() {
return exclusiveOwnerThread;
}
}
慢慢往下看。
参考文档
[1]: Java并发编程-看懂AQS的前世今生
[2]: java架构师成长之路-Java并发核心类AQS同步器原理分析
[3]: AbstractQueuedSynchronizer源码解析