package java.util.concurrent.locks;
/*
*一个可以以独占方式拥有的同步器,它为构建锁和其他同步器的提供了基础,其本身不管理和使用这些信
*息,但是其子类和工具可以通过维护一些状态值来实现访问的控制和管理以及提供诊断
*/
public abstract class AbstractOwnableSynchronizer
implements java.io.Serializable {
/**序列化版本号*/
private static final long serialVersionUID = 3737899427754241961L;
/**
* 子类需要使用的空构造器
*/
protected AbstractOwnableSynchronizer() { }
/**
* 当前以独占方式拥有这个同步器的线程
*/
private transient Thread exclusiveOwnerThread;
/**
* 设置当前拥有独占访问的线程。 null 参数表示没有线程拥有访问。此方法不另外施加任何同步或 volatile
* 字段访问。
*/
protected final void setExclusiveOwnerThread(Thread thread) {
exclusiveOwnerThread = thread;
}
/**
*返回由 setExclusiveOwnerThread 最后设置的线程;如果从未设置,则返回 null。此方法不另外施加任何
*同步或 volatile 字段访问。
*/
protected final Thread getExclusiveOwnerThread() {
return exclusiveOwnerThread;
}
}
备注:这个类的设计初衷本身就是为了抽离出一部分公共的方法保证类的单一职责和拓展性,将独占模式部分内容抽离出来封装到一个抽象类中。而之所以没有采用接口,可能更多的是考虑到独占模式这个实体的拓展性,接口的局限性是不能够带属性,而抽象类可以,其次,采用抽象类的设计一定程度上可以降低框架的深度,同时又不会失去其拓展性。
站在整个软件设计的角度来看,抽象类是一种模板式的设计,它更多的是抽离出一些比较复杂的对象的一些公共内容(包括了行为和属性),而接口是一种辐射式设计,它的关注点在行为上面,或者说它更多是起其一种约束作用,任何实现了接口的类都必须受到接口的约束。