Java 类库中包含许多有用的”基础模块“类。通常,我们应该优先选择重用这些现有的类而不是创建新的类。:重用能降低开发工作量、开发风险(因为现有类都已经通过测试)以及维护成本。有时候,某个线程安全类能支持我们需要的所有操作,但更多的时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全的情况下添加一个新的操作。
假设我们需要一个线程安全的链表,他需要提供一个原子的”若没有则添加(Put-If-Absent)“的操作。同步的 List 类已经实现了大部分的功能,我们可以根据它提供的 contains 方法和 add 方法构造一个实现。
可以有四种方法来实现这个原子操作。
第一种方法,也是最安全的方法,便是修改原始类。
但这通常是无法做到的,因为你可能无法访问或修改类的源代码。要想修改原始的类,就需要深刻理解代码中的同步策略,这样增加的功能才能与原有的设计保持一致。如果直接将新方法添加到类中,那么意味着实现同步策略的所有代码仍然处于一个源代码文件中,从而更容易理解与维护。
第二种方法,可以扩展(继承)这个类—-假如原始类在设计的时候时考虑到了它的可扩展性。
例如,我们可以设计一个 BetterVector 对 Vector 进行扩展,并添加了一个新方法 putIfAbsent。
public class BetterVector<E> extends V