Java并发编程实战:第四章读书笔记

第四章 对象的组合

摘要: 本章我认为最主要就讲了一点,那就是如何构建一个线程安全的类。

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的其他方法
}

总结: 本章主要讲述了如何构造线程安全的类。

猜你喜欢

转载自blog.csdn.net/lcn_2017/article/details/81273196