1.设计线程安全类的过程应该包括下面3个基本要素:
l 确保对象状态是由哪些变量构成的;
l 确定限制状态变量的不变约束
l 制定一个管理并发访问对象状态的策略
注意:如果一个对象的域引用了其他对象,那么它的状态也同时包含了被引用对象的域。
2.同步策略(synchronization policy)定义了对象如何协调对其状态的访问,并不会违反它的不变约束或后验条件。它规定了如何把不变性、线程限制和锁结合起来,从而维护了线程的安全性。为了维护,应该将类的同步策略写入文档。
3.收集同步需求
不变约束可以判断一个状态是合法的还是非法的。
后验条件可以支持某种状态转换时非法的。
不变约束与后验条件施加在状态及状态转换上的约束,引入了额外的同步与封装的需求。
不理解对象的不变约束和后验条件,你就不能保证线程安全性。要约束状态变量的有效值或者状态转换,就需要原子性和封装性。
注(自己):
根据文章描述,不变约束是某些不变的情形(约束),而后验条件是,对编码检查是否符合某种情况下的原子性要求。
4.状态依赖的操作
若一个操作基于状态的先验条件,则把它称为状态依赖的。
5.状态所有权
在定义对象状态是由哪些变量构成时,我们只考虑那些对象所拥有的数据。
在很多情况下,所有权与封装性总是在一起出现的:对象封装了它拥有的状态,且拥有它封装的状态。
容器类通常表现出一种“所有权分离”的形式。这里指容器拥有容器框架的状态,而客户代码拥有存储在容器中的对象的状态。例如:servlet框架中的ServletContext,ServletCoontext为Servlet提供了类似Map的对象的容器服务