Java并发编程之设计模式

本文介绍了同步模式中的保护性暂停(Guarded Suspension)概念及其应用。该模式用于一个线程等待另一个线程的执行结果,适用于需要在多个类之间传递GuardedObject对象的情况,并通过中间解耦类支持多任务管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步模式之保护性暂停

1. 定义

即 Guarded Suspension,用在一个线程等待另一个线程的执行结果

要点

  • 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject
  • 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)
  • JDK 中,join 的实现、Future 的实现,采用的就是此模式
  • 因为要等待另一方的结果,因此归类到同步模式

在这里插入图片描述

2. 实现

在这里插入图片描述
在这里插入图片描述

应用

一个线程等待另一个线程的执行结果

在这里插入图片描述
执行结果
在这里插入图片描述

3. 带超时版 GuardedObject

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试,没有超时
在这里插入图片描述
在这里插入图片描述
输出
在这里插入图片描述
测试,超时
在这里插入图片描述
输出
在这里插入图片描述
4. 多任务版 GuardedObject
图中 Futures 就好比居民楼一层的信箱(每个信箱有房间编号),左侧的 t0,t2,t4 就好比等待邮件的居民,右
侧的 t1,t3,t5 就好比邮递员
如果需要在多个类之间使用 GuardedObject 对象,作为参数传递不是很方便,因此设计一个用来解耦的中间类,
这样不仅能够解耦【结果等待者】和【结果生产者】,还能够同时支持多个任务的管理

在这里插入图片描述
新增 id 用来标识 Guarded Object
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中间解耦类
在这里插入图片描述
业务相关类
在这里插入图片描述
在这里插入图片描述
测试
在这里插入图片描述
某次运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值