4.1 设计线程安全的类
三个基本要素 :
- 找出构成对象状态的所有变量
- 找出约束状态变量的不变性条件
- 建立对象状态的并发访问管理策略
4.1.1 同步需求
如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.
要满足在状态变量的有效值或状态转换上的各种约束条件, 则需要借助于原子性和封装性.
4.1.2 依赖状态的操作
如果某个操作有基于状态的先验条件, 则该操作称为依赖状态的操作.
等待某个条件为真的各种内置机制都与内置加锁紧密关联.
一种更简单的方法是通过现有库中的类(阻塞队列[Block Queue] 或者 信号量[Semaphore]) 来实现依赖状态的操作.
4.1.3 状态的所有权
状态变量的所有者将决定采用何种加锁协议来维持状态变量的完整性.
对象发布之前拥有其状态变量的所有权.发布之后又共享控制权.
4.2 实例封闭
将数据封装在对象内部,将数据的访问和操作限制在对象的方法上,从而更容易的确保线程访问数据时总能持有正确的锁.
封闭机制更易于构造线程安全的类.
4.2.1 Java 监视器模式
将对象所有的可变状态封装起来,并有对象自己的内置锁来保护.
原文地址:https://www.cnblogs.com/virgosnail/p/9446469.html
时间: 2024-09-30 20:40:21