zoukankan      html  css  js  c++  java
  • 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的路径都是已知的,便于做到线程安全;如果数据被封闭到对象里面,要访问数据都要通过方法,从而更容易确保并发的时拿到正确的锁;

  • 相关阅读:
    logback 范例
    mysql中int、bigint、smallint 和 tinyint的区别详细介绍
    MySQL中视图和普通表的区别
    Linux 下升级JDK 1.7到1.8
    本人遇到的spring事务之UnexpectedRollbackException异常解决笔记
    Spring 调度任务@scheduled学习总结
    javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
    spring中的scope详解
    Spring Boot 静态资源处理
    用人所长
  • 原文地址:https://www.cnblogs.com/zhihuayun/p/6852958.html
Copyright © 2011-2022 走看看