Java并发编程——组合对象

1、设计线程安全的类

设计线程安全类的过程应该包括下面3个基本要素:

1)确定对象状态是由哪些变量构成的;

2)确定限制状态变量的不变约束; 

3) 制定一个管理并发访问对象状态的策略。

不理解对象的不变约束和后验条件,你就不能保证线程安全性。要约束状态变量的有效值或者状态转换,就需要原子性与封装性。

2、实例限制

将数据封装在对象内部,把对数据的访问限制在对象的方法上,更易确保线程在访问数据时总能获得正确的锁。

   public class PersonSet{

       private final Set mySet = new HashSet();

       public synchronized void addPerson(Person p){

           mySet.add(p);

        }

       public synchronized boolean containsPerson(Person p){

           return mySet.contains(p);

        }

    }

限制性使构造线程安全的类变得更容易。因为类的状态被限制后,分析它的线程安全性时,就不必检查完整的程序。

3、委托线程安全

如果一个类由多个彼此独立的线程安全的状态变量组成,并且类的操作不包括任何无效状态转换时,可以将线程安全委托给这些状态变量。

4、向已有线程安全类添加功能

5、同步策略文档化

为类的用户编写线程安全性担保的文档;为类的维护者编写类的同步策略文档。



留言