4.1 设计线程安全的类
通过使用封装技术,可以使得在不对整个程序进行分析的情况下就可以判断一个类是否是线程安全的。
在设计线程安全类的过程中,需要包含以下三个基本要素:找出构成对象状态的所有变量;找出约束状态变量的不变性条件;建立对象状态的并发访问管理策略。
要分析对象的状态,首先从对象的域开始。
同步策略(Synchronization Policy)定义了如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行协同。同步策略规定了如何将不可变性、线程封闭与加锁机制结合起来以维护线程安全性,并且还规定了哪些变量有哪些锁来保护。
4.1.1 收集同步需求
要确保类的线程安全性,就需要确保它的不变性条件不会在并发的情况下被破坏,这就需要对其状态进行推断。对象与变量都有一个状态空间,即所有可能的取值。状态空间越小,就越容易判断线程的状态。final类型的域使用得越多,就越能简化对象可能状态的分析过程。
4.1.2 依赖状态的操作
类的不变性条件与后验条件约束了在对象上有哪些状态和状态转换是有效的。如果在某个操作中包含有基于状态的先验条件,那么这个操作就成为依赖状态的操作。
4.1.3 状态的所有权
许多情况下,所有权与封装性是相互关联的:对象封装它拥有的状态,反之也成立,即对它封装的状态拥有所有权。
容器类通常表现出一种“所有权分离”的形式,其中容器类拥有其自身的状态,而客户代码则拥有容器中各个对象的状态。
时间: 2024-10-19 15:24:48