[Java 并发编程实战] 设计线程安全的类的三个方式(含代码) (4)

相比前面两种机制,这是一种更好的方法。如下所示,ImprovedList 将 List 的操作委托给底层的 List 对象,然后自己继承 List 接口的所有方法并对他们加上同步锁。

1import java.util.Collection;
2import java.util.Iterator;
3import java.util.List;
4import java.util.ListIterator;
5
6public class ImprovedList<T> implements List<T>{
7
8 private final List<T> list;
9
10 public ImprovedList(List<T> list) {
11 this.list = list;
12 }
13
14 //同步方法
15 public synchronized boolean putIfAbsent(T x) {
16 boolean contains = list.contains(x);
17 if(!contains)
18 list.add(x);
19 return contains;
20 }
21
22 @Override
23 public synchronized boolean add(T arg0) {
24 list.add(arg0);
25 return false;
26 }
27
28 @Override
29 public synchronized void clear() {
30 // TODO Auto-generated method stub
31 list.clear();
32 }
33
34 //按照此同步方式实现其他方法
35
36}

ImprovedList 增加了一层自身的内置锁,它不用关心底层的 List 是否线程安全或者底层 List 修改了他自己的加锁实现,ImprovedList 都能构提供一致的加锁机制来实现线程安全性。当然,加多一层锁会导致性能损失,但是 ImprovedList 相比前面两种方式也更加健壮。

上面就是构建安全类的所有内容,希望对你有所帮助,谢谢!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdjxg.html