对象组合

    安全组件组合模式,是一个类更容易成为线程安全的,并且在维护过程中不会无意中破坏类的安全性保证。

 1设计线程安全的类

  设计线程安全类 包含的三要素

    找出构成对象状态的所有变量

    找出约束状态变量的不变性条件

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

  关键词:  对象状态      不变性条件      并发访问管理策略
    

 

  1.1  收集同步需求

    1.确保不变性条件 不会在并发访问的情况下被破坏(counter 封装   复合操作)

    2.后验条件判断判断状态迁移是否有效

    3.实现后验条件和不变性条件的约束,需要额外的同步与封装

  1.2 依赖状态操作

    先验条件

    例子:队列为空不能删除  

    并发,先验条件可能为真

  1.3  状态所有权
    并发访问一个对象时避免产生相互干扰:  线程安全对象,事实不可变对象,有锁来保护的对象

  2.实例封闭

    对象不是线程安全的,你可以确保该对象只能由单个线程访问,或者通过一个锁来保护对该对象的所有访问。

  封闭在类的一个实例(作为一个私有成员)

  封闭在某个作用域(作为一个成员变量)

  

   

  Person类如果是可变的,需要额外的同步。
    

  2.1 Java监视器模式

    一种约定:对于任何一种锁对象,只要自始至终都使用该锁对象,都可以用来保护对象的状态。

    

    2.2 车辆追踪示例

 3.线程安全性的委托

    

  多个线程安全的组件组合成的一个类,是线程安全的么?

 

  3.1车辆追踪器

 

   

  

  

 

 3.2  独立状态变量

   变量之间不存在不可变条件

 

posted @ 2019-05-17 11:32  马三  阅读(220)  评论(0编辑  收藏  举报