美文网首页
Java并发编程实战 第4章 对象的组合

Java并发编程实战 第4章 对象的组合

作者: kaiker | 来源:发表于2023-08-11 19:11 被阅读0次

1、设计线程安全的类

  • 找出构成对象状态的所有变量
  • 找出约束状态变量的不变形条件
  • 建立对象状态的并发访问管理策略

2、实例封闭

将数据封装在对象内部,可以将数据访问限制在访问对象的方法上,从而更容易确保线程在访问数据时总能持有正确锁。

Java监视器模式

public class PrivateLock {
    private final Object myLock = new Object();
    void someMethod() {
        synchronized(myLock) {}
    }
}

3、线程安全性的委托

  • 委托给不可变的对象 (final)
  • 委托给多个相互独立的变量
  • 如果一个状态变量时线程安全的,并且没有任何不变性条件来约束它的值,在变量的操作上也不存在任何不允许的状态转换,那么就可以安全地发布这个变量。

4、在现有线程安全类中添加功能

下面第一个例子没有在list上同步

public class ListHelper<E> {
    public List<E> list = Collections.synchronizedList(new ArrayList<E>());

    public synchronized boolean putIfAbsent(E x) {
        boolean absent = !list.contains(x);
        if (absent) list.add(x);
        return absent;
    }
}

最好的方式是使用组合,在对象本身上进行同步。

public class ImprovedList<T> implements List<T> {
    private final List<T> list;

    public ImprovedList(List<T> list);

    public synchronized boolean putIfAbsent(T x) {
        boolean contains = list.contains(x);
        if (contains) list.add(x);
        return !contains;
    }
}

相关文章

网友评论

      本文标题:Java并发编程实战 第4章 对象的组合

      本文链接:https://www.haomeiwen.com/subject/mrmtmdtx.html