Java并发编程实践之对象的组合

---恢复内容开始---

1 对象组合的目的

  将一些现有的线程安全类组合成更大的组件,也是线程安全的;

  1.1 构造线程安全的类需要考虑:

    构成对象状态的所有变量;

    对象变量的不变性条件(对象的变量都有取值范围,要保证变量的取值都在这个范围内,

    否则,对象的状态就是无效的);

    建立对象状态的并发管理策略;

  1.2 类的不变性条件和类的后验条件

    不变性条件:变量都有一个取值范围,比如 long count,count的取值范围是Long.MIN_VALUE,Long.MAX_VALUE,

    再加上自己定义的count>=0;故count变量的不变性条件就是count>=0 && count <= Long.MAX_VALUE;

    后验条件:判断对象从一个状态A转到状态B是否是有效的;

  1.3 状态的所有权

    对象封装它拥有的状态,就拥有状态的所有权,也就是能改变状态;如果把这个对象的引用发布出去,那么对象就不是独占状态的所有权了,需要和其他的一起共享状态的所有权;

    

---恢复内容结束---

1 对象组合的目的

  将一些现有的线程安全类组合成更大的组件,也是线程安全的;

  1.1 构造线程安全的类需要考虑:

    构成对象状态的所有变量;

    对象变量的不变性条件(对象的变量都有取值范围,要保证变量的取值都在这个范围内,

    否则,对象的状态就是无效的);

    建立对象状态的并发管理策略;

  1.2 类的不变性条件和类的后验条件

    不变性条件:变量都有一个取值范围,比如 long count,count的取值范围是Long.MIN_VALUE,Long.MAX_VALUE,

    再加上自己定义的count>=0;故count变量的不变性条件就是count>=0 && count <= Long.MAX_VALUE;

    后验条件:判断对象从一个状态A转到状态B是否是有效的;

  1.3 状态的所有权

   对象封装它的状态,就拥有状态的所有权,也就是能改变状态;如果对象的引用发布出去,就不是对象独占状态的所有权了,就是和其他一起共享状态的所有权;

2.实例封闭

  对象A被封闭到另一个对象B里面,访问对象A的路径都是已知的,便于做到线程安全;如果数据被封闭到对象里面,要访问数据都要通过方法,从而更容易确保并发的时拿到正确的锁;

 

posted on 2017-05-31 10:34  heartzhizi  阅读(277)  评论(0编辑  收藏  举报

导航