Java 并发编程(三)为线程安全类中添加新的原子操作

本文介绍了在Java中为线程安全类添加原子操作的四种方法:修改原始类(最安全但不易实现)、扩展类(易被底层同步策略改变破坏)、使用辅助类(客户端加锁,存在同步假象问题)和组合方式。文章通过实例分析了各种方法的优缺点和潜在风险。
摘要由CSDN通过智能技术生成

        Java 类库中包含许多有用的”基础模块“类。通常,我们应该优先选择重用这些现有的类而不是创建新的类。:重用能降低开发工作量、开发风险(因为现有类都已经通过测试)以及维护成本。有时候,某个线程安全类能支持我们需要的所有操作,但更多的时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全的情况下添加一个新的操作。

        假设我们需要一个线程安全的链表,他需要提供一个原子的”若没有则添加(Put-If-Absent)“的操作。同步的 List 类已经实现了大部分的功能,我们可以根据它提供的 contains 方法和 add 方法构造一个实现。

可以有四种方法来实现这个原子操作。


第一种方法,也是最安全的方法,便是修改原始类

但这通常是无法做到的,因为你可能无法访问或修改类的源代码。要想修改原始的类,就需要深刻理解代码中的同步策略,这样增加的功能才能与原有的设计保持一致。如果直接将新方法添加到类中,那么意味着实现同步策略的所有代码仍然处于一个源代码文件中,从而更容易理解与维护。


第二种方法,可以扩展(继承)这个类—-假如原始类在设计的时候时考虑到了它的可扩展性。

例如,我们可以设计一个 BetterVector 对 Vector 进行扩展,并添加了一个新方法 putIfAbsent。

public class BetterVector<E> extends V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值