Java并发编程4.1-设计线程安全的类

1.设计线程安全类的过程应该包括下面3个基本要素:

l 确保对象状态是由哪些变量构成的;

l 确定限制状态变量的不变约束

l 制定一个管理并发访问对象状态的策略

注意:如果一个对象的域引用了其他对象,那么它的状态也同时包含了被引用对象的域。

2.同步策略(synchronization policy)定义了对象如何协调对其状态的访问,并不会违反它的不变约束或后验条件。它规定了如何把不变性、线程限制和锁结合起来,从而维护了线程的安全性。为了维护,应该将类的同步策略写入文档。

3.收集同步需求

不变约束可以判断一个状态是合法的还是非法的。

后验条件可以支持某种状态转换时非法的。

不变约束与后验条件施加在状态及状态转换上的约束,引入了额外的同步与封装的需求。

不理解对象的不变约束和后验条件,你就不能保证线程安全性。要约束状态变量的有效值或者状态转换,就需要原子性和封装性。

注(自己):

根据文章描述,不变约束是某些不变的情形(约束),而后验条件是,对编码检查是否符合某种情况下的原子性要求。

4.状态依赖的操作

若一个操作基于状态的先验条件,则把它称为状态依赖的。

5.状态所有权

在定义对象状态是由哪些变量构成时,我们只考虑那些对象所拥有的数据。

在很多情况下,所有权与封装性总是在一起出现的:对象封装了它拥有的状态,且拥有它封装的状态。

容器类通常表现出一种“所有权分离”的形式。这里指容器拥有容器框架的状态,而客户代码拥有存储在容器中的对象的状态。例如:servlet框架中的ServletContextServletCoontextServlet提供了类似Map的对象的容器服务

猜你喜欢

转载自blog.csdn.net/lvxingzhe123456/article/details/41926415
今日推荐