对象组合
安全组件组合模式,是一个类更容易成为线程安全的,并且在维护过程中不会无意中破坏类的安全性保证。
1设计线程安全的类
设计线程安全类 包含的三要素
找出构成对象状态的所有变量
找出约束状态变量的不变性条件
建立对象状态的并发访问管理策略
关键词: 对象状态 不变性条件 并发访问管理策略
1.1 收集同步需求
1.确保不变性条件 不会在并发访问的情况下被破坏(counter 封装 复合操作)
2.后验条件判断判断状态迁移是否有效
3.实现后验条件和不变性条件的约束,需要额外的同步与封装
1.2 依赖状态操作
先验条件
例子:队列为空不能删除
并发,先验条件可能为真
1.3 状态所有权
并发访问一个对象时避免产生相互干扰: 线程安全对象,事实不可变对象,有锁来保护的对象
2.实例封闭
对象不是线程安全的,你可以确保该对象只能由单个线程访问,或者通过一个锁来保护对该对象的所有访问。
封闭在类的一个实例(作为一个私有成员)
封闭在某个作用域(作为一个成员变量)
Person类如果是可变的,需要额外的同步。
2.1 Java监视器模式
一种约定:对于任何一种锁对象,只要自始至终都使用该锁对象,都可以用来保护对象的状态。
2.2 车辆追踪示例
3.线程安全性的委托
多个线程安全的组件组合成的一个类,是线程安全的么?
3.1车辆追踪器
3.2 独立状态变量
变量之间不存在不可变条件