Guarded Suspension Pattern【其他模式】
Guarded Suspension Pattern
public class GuardedSuspension {
/**
* Guarded Suspension Pattern【保护悬挂模式】:如果目标对象不在指定的状态下,则执行警戒方法时,
* 当前线程将阻塞等待,直到目标对象进入指定状态为止。
*/
@Test
public void all() throws InterruptedException {
final Disk disk = new Disk();
CompletableFuture.runAsync(() -> new Consumer(disk).consume());
TimeUnit.SECONDS.sleep(2);
new Produer(disk).produce();
TimeUnit.SECONDS.sleep(2);
}
}
@AllArgsConstructor
@Slf4j
class Consumer {
private final Disk disk;
public void consume() {
synchronized (disk) {
if (disk.empty()) {
log.info("current thread is waiting now. {}", Thread.currentThread().getName());
try {
disk.wait();
log.info("take item {}", disk.take());
} catch (final InterruptedException e) {
log.error("Interrupted", e);
}
}
}
}
}
@AllArgsConstructor
class Produer {
private final Disk disk;
public void produce() {
synchronized (disk) {
if (disk.empty()) {
disk.put(Thread.currentThread().getName());
disk.notify();
}
}
}
}
class Disk {
private transient String item;
public boolean empty() {
return StringUtils.isBlank(item);
}
public String take() {
final String take = item;
item = null;
return take;
}
public void put(String item) {
if (StringUtils.isBlank(item)) {
throw new IllegalStateException("invalid item ");
}
this.item = item;
}
}
Guarded Suspension Pattern【其他模式】的更多相关文章
- 多线程程序设计学习(4)guarded suspension模式
Guarded Suspension[生产消费者模式] 一:guarded suspension的参与者--->guardedObject(被防卫)参与者 1.1该 ...
- 多线程同步循环打印和Guarded suspension 模式
* 迅雷笔试题: * 有三个线程ID分别是A.B.C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步. 线程同步有两种 ...
- 多线程学习之三生产者消费者模式Guarded Suspension
Guarded Suspension[生产消费者模式] 一:guarded suspension的参与者--->guardedObject(被防卫)参与者 1.1该 ...
- 多线程系列之四:Guarded Suspension 模式
一,什么是Guarded Suspension模式如果执行现在的处理会造成问题,就让执行处理的线程等待.这种模式通过让线程等待来保证实例的安全性 二,实现一个简单的线程间通信的例子 一个线程(Clie ...
- 并发设计模式之Guarded Suspension模式
- 原文链接: http://www.joyhwong.com/2016/11/19/并发设计模式之guarded-suspension模式/ Guarded Suspension意为保护暂停,其核心 ...
- 并行模式之Guarded Suspension模式
并行模式之Guarded Suspension模式 一).Guarded Suspension: 保护暂存模式 应用场景:当多个客户进程去请求服务进程时,客户进程的请求速度比服务进程处里请求的速度快, ...
- Guarded Suspension模式简单实现
Guarded Suspension 意为保护暂停,假设服务器很短时间内承受大量的客户端请求,客户端请求的数量超过服务器本身的即时处理能力,而服务器又不能丢弃任何一个客户端请求,此时可以让客户端的请求 ...
- Laravel与Repository Pattern(仓库模式)
为什么要学习Repository Pattern(仓库模式) Repository 模式主要思想是建立一个数据操作代理层,把controller里的数据操作剥离出来,这样做有几个好处: 把数据处理逻辑 ...
- Provider Pattern提供者模式和策略模式
http://www.codeproject.com/Articles/18222/Provider-Pattern Introduction Provider pattern is one of t ...
随机推荐
- python中输入三个整数x,y,z,请把这三个数由小到大输出。
输入三个整数x,y,z,请把这三个数由小到大排序,再把数组由大到小排序,再输出最大值和最小值! #定义一个空数组 numbers = [] #循环遍历,下面的4是控制循环次数 for i in ran ...
- Linux文档整理之【Mysql安装与配置】
最近公司让整理一个Linux安装Mysql的文档.所以就整理了一下,这里将自己整理的详细文档做个笔记. 1.下载Mysql. https://dev.mysql.com/downloads/mysql ...
- js的抖动及防抖和节流
js的抖动 在 js 中 改变窗口大小 & 上下滚动滚动条 & 反复向输入框中输入内容 ... , 如果绑定了相应的事件 , 这些事件的触发频率非常高, 严重影响用户体验和服务器的性 ...
- Django之AJAX请求
---恢复内容开始--- 一.choices字段 1.实列 前端代码 <div class='container'> <div class="row"> ...
- 安装运行redis
在Linux系统上安装Redis 环境准备 Redis是C语言开发,建议在Linux上运行,本人系统centos-6.5. 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有g ...
- dll和ocx的区别
ActiveX,OLE是基于COM的一种应用,其文件后缀一般以dll和ocx结尾:ocx作为一种特殊的dll文件,具有一定的用户界面和事件响应,而dll文件只是方法和属性的集合. 一.关于DLL的介绍 ...
- 03python面向对象编程3
案例学习 # notebook.pyimport datetime # Store the next available id for all new notes last_id = 0 class ...
- python文件读写详解
# Python3 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ...
- Django【第5篇】:Django之ORM数据库操作
django之ORM数据库操作 一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录-------- ...
- 048:ORM模型基本的增删改查操作
ORM对数据库的增删改查基本操作: 创建模型如下: 基本的增删改查如下: