10.并发设计模式
总结
- Immutability:所有属性 final,天然线程安全,但引用类型属性指向的对象仍可变
- Copy-on-Write:写时复制,读多写少场景,可容忍短暂不一致
- ThreadLocal:每个线程持有副本,彻底避免共享,详见 11.ThreadLocal
- Guarded Suspension:等条件满足再执行,是等待-通知机制的模式化封装,典型应用是异步转同步
Immutability 模式(不变性)
对象创建后状态不再改变,天然线程安全,无需加锁。
- 所有属性
final是必要条件,但不充分(属性是引用类型时,引用指向的对象仍可变) - 不可变对象也需要正确发布(通过
final字段或 volatile 发布)
典型:String、Integer 等包装类。
Copy-on-Write 模式(写时复制)
读操作直接读原数据,写操作复制一份新数据修改,修改完再替换引用。
- 延时策略:只有真正需要写时才复制
- 适合读多写少,可容忍读写短暂不一致
- 对应容器:CopyOnWriteArrayList
线程本地存储模式(Thread Local Storage)
每个线程持有自己的变量副本,彻底避免共享,无需同步。详见 [[11.ThreadLocal]]。
Guarded Suspension 模式(保护性暂停)
等待条件满足后再继续执行,是 06.等待-通知机制 的模式化封装。
请求方 → 放入 GuardedObject → 等待结果
处理方 → 处理完成 → 填充结果 → 唤醒请求方
典型应用:异步转同步(如 RPC 等待响应),Lock+Condition 可以实现这个模式。