第四章 对象的组合
摘要: 本章我认为最主要就讲了一点,那就是如何构建一个线程安全的类。
1. 线程安全的类 如何设计出线程安全的类,书中给了几个建议翻译成大白话就是 先抽象然后找出哪些状态是不可变的,然后找出变量不可变的条件,最后对可变状态进行并发访问的管理。
我觉得本章比较重点的一个做法就是将线程安全性委托。
在我们写类时,可以将可变的状态封装给一个线程安全的类,这样就叫做线程安全的委托。最简单的例子就是用一个ConcurrentHashMap来维护类的某个状态,这就是把线程安全性委托给了线程安全的类同步容器。
2. 在现有线程安全类中添加功能
Java类库有许多有用的基础模块,那么通常我们在实现的时候回优先选择重用这些现有的类。那么当基础模块不是完全满足时,我们就需要基于他们添加一些线程安全的功能。
本书提供了如没有则添加的功能作为例子我认为很好,虽然在现在Java的版本中他已经被实现,但他仍然不失为一个好的学习示范。
我这里就给出最终的版本。构建思想: 通过装饰器模式维护一个类(不论是否线程安全), 在装饰器类中基于并发实现新的功能
public class ImprovedList<T> implements List<T> {
private List<T> list;
public ImprovedList(List<T> list) {
this.list = list;
}
public synchronized boolean putIfAbsent(T t) {
boolean contains = list.contains(t);
if (!contains) {
list.add(t);
}
return !contains;
}
public synchronized void clear() { list.clear(); }
// ...按照类似的方式委托List的其他方法
}
总结: 本章主要讲述了如何构造线程安全的类。