对象的组合
一、设计线程安全的类
1.在设计线程安全类的过程中,需要包括以下三个基本要素:
1)找出构成对象状态的所有变量
2)找出约束状态变量的不变性条件
3)建立对象状态的并发访问管理策略
2.收集同步需求
要确保类的线程安全性,就需要确保它的不变性条件不会再并发访问的情况下被破坏,这就需要对其状态进行推断。
对象与变量都有一个状态空间,即所有可能的取值,状态空间越小,就越容易判断线程的状态。
如果不了解对象的不变性条件和后验条件,那么久不能确保线程安全性。要满足在状态量的有效值或状态转换上的各种条件,就需要借助于原子性与封装性。
3.依赖状态的操作
如果在某个操作中包含基于状态的先验条件,那么这个操作就称为依赖状态的操作。
二、实例封闭
1.封装简化了线程安全类的实现过程,它提供了一种实例封闭机制,通常也简称为“封闭”。
2.将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据是总能持有正确的锁。
3.封闭机制更易于构造线程安全类,因为当封闭类的状态变化时,在分析类的线程安全性时就无须检查整个程序。
4.Java监视器模式
从线程封闭原则及其逻辑推论可以得出Java监视器模式。遵循Java监视器模式的对象会把对象的所有可变状态都封装起来,并且由对象自己的内置锁来保护。
三、线程安全性的委托
如果一个状态变量时线程安全的,并且没有任何不变性条件来约束它的值,在变量的操作上也不存在任何允许的状态转换,那么久可以安全的发布这个变量。
时间: 2024-10-26 11:25:34