一 点睛

当线程在访问某个对象时,发现条件不满足,就暂时挂起等待条件满足时再次访问,这就是 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 设计模式相关推荐

  1. Java高并发编程详解系列-Guarded Suspension设计模式

    导语   什么是Guarded Suspension模式,Suspension 意思是挂起,暂停的.而Guarded则表示担保的意思,连起来的就是确保挂起.也就是说当线程访问某个对象的时候,发现条件不 ...

  2. 并发设计模式——保护性暂停(Guarded Suspension)

    并发设计模式--保护性暂停(Guarded Suspension) 什么叫做 Guarded Suspension ? guarded 的意思是"守护.担保",suspension ...

  3. 并发设计模式之Guarded Suspension模式

    - 原文链接: http://www.joyhwong.com/2016/11/19/并发设计模式之guarded-suspension模式/ Guarded Suspension意为保护暂停,其核心 ...

  4. Java并发编程实战~Guarded Suspension模式

    Guarded Suspension 模式 比如,项目组团建要外出聚餐,我们提前预订了一个包间,然后兴冲冲地奔过去,到那儿后大堂经理看了一眼包间,发现服务员正在收拾,就会告诉我们:"您预订的 ...

  5. (Guarded Suspension Design Pattern)

    多线程设计模式之保护性暂停模式 定义 保护性暂停模式(Guarded Suspension Design Pattern):当线程在访问某个对象时,发现条件不满足时,就暂时挂起等待条件满足时再次访问. ...

  6. 实战并发编程 - 08基于Guarded Suspension模式优化轮询while(true)

    文章目录 Guarded Suspension模式简介 看牙医的就诊流程 代码举例 总结与拓展 Guarded Suspension模式简介 guarded在这里是"保护"的意思: ...

  7. java暂挂状态,Guarded Suspension(保护性暂挂)模式

    思维导图 思维导图 Guarded Suspension 模式简介 Guarded Suspension 模式的核心是一个受保护方法(Guarded Method).该方法在执行其所需要真正执行的操作 ...

  8. 多线程模式(2):Guarded Suspension模式

    为什么80%的码农都做不了架构师?>>>    封装请求类 package com.xqi.g_s;import com.xqi.f.Data;/*** 请求封装* * @autho ...

  9. 实战并发编程 - 09多线程Guarded Suspension模式案例实战

    文章目录 需求 Code (上) [1. init初始化报警服务] [2.onConnected方法建立连接] [3.HeartbeatTask心跳检查] [4.tesConnection测试是否连接 ...

  10. Java 高并发第二阶段实战---高并发设计模式,内存模型,CPU一致性协议,volatile关键字剖析

    第二阶段的课程主要围绕着Volatile关键字,内存重排序,Happen-Before,Cpu一致性协议,高并发下的设计模式以及类加载器几个大的方面展开,下面是内容详细信息,本教程是本人录制,下载地址 ...

最新文章

  1. c++ 调用python返回指针
  2. Windows 技术篇-网卡物理(MAC)地址查看方法
  3. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
  4. python是面向什么的计算机程序设计语言_Python是一种计算机程序设计语言,python到底该怎么学习...
  5. qt QMessageBox 中文乱码的问题
  6. PCL之ubuntu安装CloudCompare
  7. c# 实现查找mysql安装路径
  8. 正样本和负样本,前景类/ 背景,hard negative mining
  9. 达内JAVA云笔记_达内云笔记项目完整代码+注释
  10. 基于PLC远程监控,PLC远程运维,PLC远程调试的系统软件开发方案
  11. ubuntu18.04安装PCL点云库踩坑指南
  12. 安全 | 开源入侵防御系统 Snort
  13. 2.5 随从受伤溅血效果的实现———自制卡牌游戏之旅
  14. su: Authentication failure问题
  15. Minio分布式集群部署(Swarm)
  16. mysql decimal
  17. JAVA语言考试系统的设计与实现(论文+源代码+文献综述+外文翻译+开题报告)
  18. 武大女博士遭遇第一学历歧视 大学生出身引关注
  19. 北大青鸟java数组_北大青鸟:Java 数组解说(1)
  20. 51单片机 通过 tb6600驱动 步进电机

热门文章

  1. 上海高考物理能不能用计算机,上海高考物理卷并未超纲 但不按套路出牌
  2. JEECG集成flowable
  3. 2019 360校招笔试- 编程题 -2018.08.27
  4. 【BIT数据库实验】openGauss数据库实验二:数据库查询
  5. Pocket PC模拟器设置上网
  6. 打开浏览器默认打开hao123网站的主页怎么取消设置?
  7. 23位子网掩码是多少_子网掩码23位的是多少
  8. 阵列服务器怎么拆硬盘盒,磁盘阵列硬盘盒拆解和安装,很详细
  9. 苹果手机开机一会显示无服务器,苹果手机出现无信号的解决方法
  10. 简简单单批量安装windows主机