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

本文介绍了如何设计线程安全的类,包括将线程安全性委托给已存在的线程安全类,以及如何在现有线程安全类基础上添加新功能。通过一个具体的例子展示了使用装饰器模式实现线程安全的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章 对象的组合

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值