Guarded Suspension 设计模式
一 点睛
当线程在访问某个对象时,发现条件不满足,就暂时挂起等待条件满足时再次访问,这就是 Guarded Suspension 设计模式。该设计模式的关注点在于临界值的条件是否满足,当达到设置的临界值时相关线程则会挂起。
二 代码
package concurrent;import java.util.LinkedList;public class GuardSuspensionQueue {// 定义存放 Integer 类型的 queueprivate final LinkedList<Integer> queue = new LinkedList<>();// 定义 queue 的最大容量private final int LIMIT = 100;// 在 queue 中插入数据,如果 queue 中的元素超过了最大容量,则会陷入阻塞public void offer(Integer data) throws InterruptedException {synchronized (this) {// 判断 queue 的当前元素是否超过了 LIMITwhile (queue.size() >= LIMIT) {// 挂起当前线程,使其陷入阻塞this.wait();}// 插入元素,并唤醒 take 线程queue.addLast(data);this.notifyAll();}}// 从队列中获取元素,如果队列此时为空,则会使当前线程阻塞public Integer take() throws InterruptedException {synchronized (this) {// 判断如果队列为空while (queue.isEmpty()) {// 挂起当前线程this.wait();}// 通知 offer 线程可以继续插入数据了this.notifyAll();return queue.removeFirst();}}
}
三 说明
在 GuardSuspensionQueue 中,需要保证线程安全的是 queue,分别在 take 和 offer 方法中对应的临界值是 queue 为空和 queue 的数量 >= 100,当 queue 中的数据已经满时,如果有线程调用 offer 方法则会被挂起(Suspension),同样,当 queue 没有数据的时候,调用 take 方法也会被挂起。
Guarded Suspension 设计模式相关推荐
- Java高并发编程详解系列-Guarded Suspension设计模式
导语 什么是Guarded Suspension模式,Suspension 意思是挂起,暂停的.而Guarded则表示担保的意思,连起来的就是确保挂起.也就是说当线程访问某个对象的时候,发现条件不 ...
- 并发设计模式——保护性暂停(Guarded Suspension)
并发设计模式--保护性暂停(Guarded Suspension) 什么叫做 Guarded Suspension ? guarded 的意思是"守护.担保",suspension ...
- 并发设计模式之Guarded Suspension模式
- 原文链接: http://www.joyhwong.com/2016/11/19/并发设计模式之guarded-suspension模式/ Guarded Suspension意为保护暂停,其核心 ...
- Java并发编程实战~Guarded Suspension模式
Guarded Suspension 模式 比如,项目组团建要外出聚餐,我们提前预订了一个包间,然后兴冲冲地奔过去,到那儿后大堂经理看了一眼包间,发现服务员正在收拾,就会告诉我们:"您预订的 ...
- (Guarded Suspension Design Pattern)
多线程设计模式之保护性暂停模式 定义 保护性暂停模式(Guarded Suspension Design Pattern):当线程在访问某个对象时,发现条件不满足时,就暂时挂起等待条件满足时再次访问. ...
- 实战并发编程 - 08基于Guarded Suspension模式优化轮询while(true)
文章目录 Guarded Suspension模式简介 看牙医的就诊流程 代码举例 总结与拓展 Guarded Suspension模式简介 guarded在这里是"保护"的意思: ...
- java暂挂状态,Guarded Suspension(保护性暂挂)模式
思维导图 思维导图 Guarded Suspension 模式简介 Guarded Suspension 模式的核心是一个受保护方法(Guarded Method).该方法在执行其所需要真正执行的操作 ...
- 多线程模式(2):Guarded Suspension模式
为什么80%的码农都做不了架构师?>>> 封装请求类 package com.xqi.g_s;import com.xqi.f.Data;/*** 请求封装* * @autho ...
- 实战并发编程 - 09多线程Guarded Suspension模式案例实战
文章目录 需求 Code (上) [1. init初始化报警服务] [2.onConnected方法建立连接] [3.HeartbeatTask心跳检查] [4.tesConnection测试是否连接 ...
- Java 高并发第二阶段实战---高并发设计模式,内存模型,CPU一致性协议,volatile关键字剖析
第二阶段的课程主要围绕着Volatile关键字,内存重排序,Happen-Before,Cpu一致性协议,高并发下的设计模式以及类加载器几个大的方面展开,下面是内容详细信息,本教程是本人录制,下载地址 ...
最新文章
- c++ 调用python返回指针
- Windows 技术篇-网卡物理(MAC)地址查看方法
- linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
- python是面向什么的计算机程序设计语言_Python是一种计算机程序设计语言,python到底该怎么学习...
- qt QMessageBox 中文乱码的问题
- PCL之ubuntu安装CloudCompare
- c# 实现查找mysql安装路径
- 正样本和负样本,前景类/ 背景,hard negative mining
- 达内JAVA云笔记_达内云笔记项目完整代码+注释
- 基于PLC远程监控,PLC远程运维,PLC远程调试的系统软件开发方案
- ubuntu18.04安装PCL点云库踩坑指南
- 安全 | 开源入侵防御系统 Snort
- 2.5 随从受伤溅血效果的实现———自制卡牌游戏之旅
- su: Authentication failure问题
- Minio分布式集群部署(Swarm)
- mysql decimal
- JAVA语言考试系统的设计与实现(论文+源代码+文献综述+外文翻译+开题报告)
- 武大女博士遭遇第一学历歧视 大学生出身引关注
- 北大青鸟java数组_北大青鸟:Java 数组解说(1)
- 51单片机 通过 tb6600驱动 步进电机