对象的组合
介绍一些组合模式,这些模式能够使一个类更容易成为线程安全的,并且维护这些类时不会无意破坏类的安全性保证。
设计线程安全的类
在设计线程安全类的过程中,需要包含以下三个基本要素:
- 找出构成对象状态的所有变量
- 找出约束对象状态的不可变性条件。
- 建立对象状态的并发访问管理策略。
收集同步需求
如果不了解对象的不变性条件与后验条件,那么就不能确保线程的安全性。要满足在状态变量的有效值或状态转换上的各种约束条件,就需要借助于原子性与分装性。
依赖状态的操作
类的不变性条件与后验条件约束了对象上有哪些状态和状态转移转换是有效的。在某些对象的方法中还包含一些基于状态的先验条件。
状态的所有权
对象封装它拥有的状态,反之也成立,即对它封装的状态拥有所有权。状态变量的所有者将决定采用何种加锁协议来维持变量状态的完整性。所有权意味着控制权。
实例封闭
Java 监视器模式
把对象的所有可变状态都封装起来,并由对象自己的内置锁来保护。
线程的安全机制
如果一个类是有多个独立且线程安全的状态变量组成,并且在所有的操作中都不包含无效的状态转换,那么可以将线程安全性委托给底层的状态变量。