`

Guarded Suspension Pattern

阅读更多
防卫暂停模式
Guarded Suspension Pattern的参与者:(对应Java设计模式中的"生产消费者模式")
GuardedObject(被防卫的对象)参与者,GuardedObject参与者是一个拥有被防卫的方法(guardedMethod)的类,当线程执行guardedMethod时,只要满足警戒条件,就会马上执行,但警戒条件不成立时,就要开始等待,警戒条件的成立与否,会随GuardedObject参与者的状态改变而变化;GuardedObject参与者除了guardedMethod以外,可能还会有用来更改实例状态(特别是用来更改警戒条件)的方法(stateChangingMethod);Java语言中,使用while语句与wait方法来实现guardedMethod的,而是用notify/notifyAll方法来实现stateChangingMethod,在以下范例程序中,RequestQueue类就是GuardedObject参与者,getRequest方法与putRequest方法则分别是guardedMethod与stateChangingMethod
========Request类
public class Request {

private final String name;

public Request(String name) {
this.name = name;
}

public final String getName() {
return name;
}

public String toString() {
return "[ Request " + this.name + " ]";
}
}

=======RequestQueue类
public class RequestQueue {

private final LinkedList<Request> queue = new LinkedList();

public synchronized Request getRequest() {
try {
while (0 >= queue.size()) {
this.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return (Request) queue.removeFirst();
}

public synchronized void putRequest(Request request) {
queue.addLast(request);
notifyAll();
}
}
=======ClientRequest类
public class ClientRequest extends Thread {

private Random random;
private RequestQueue queue;

public ClientRequest(RequestQueue queue, String name, long seed) {
super(name);
this.random = new Random(seed);
this.queue = queue;
}

public void run() {
try {
Request request = null;
for (int i = 0; i < 10000; i++) {
request = new Request("No." + i);
System.out.println(Thread.currentThread().getName()
+ " requests " + request);
queue.putRequest(request);
Thread.sleep(this.random.nextInt(1000));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
=======ServerReqiest类
public class ServerRequest extends Thread {

private Random random;
private RequestQueue queue;

public ServerRequest(RequestQueue queue, String name, long seed) {
super(name);
this.queue = queue;
this.random = new Random(seed);
}

public void run() {
try {
Request request = null;
for (int i = 0; i < 10000; i++) {
request = queue.getRequest();
System.out.println(Thread.currentThread().getName()
+ " handles " + request);
Thread.sleep(this.random.nextInt(1000));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
=========测试类
public class Main {

public static void main(String[] args) {
RequestQueue queue = new RequestQueue();
new ClientRequest(queue, "Alice", 3141592L).start();
new ServerRequest(queue, "Bobby", 6535897L).start();
}
}
分享到:
评论

相关推荐

    Java多线程详解

    3、Guarded Suspension ———— 要等到我们准本好哦 4、Balking ———— 不需要的话,就算了吧 5、Producer-Consumer ———— 我来做,你来用 6、Read-Write Lock ———— 大家想看就看吧,不过看的时候不能写哦...

    java多线程设计模式 (PDF中文版, 附源码)

    第3章 Guarded Suspension——要等到我准备好喔 第4章 Balking——不需要的话,就算了吧 第5章 Producer-Consumer——我来做,你来用 第6章 Read-Write Lock——大家想看就看吧,不过看的时候不能写喔 第7章 read-...

    aqs-并发编程笔记.pdf

    并发编程笔记中的知识点涵盖了保护性暂停模式(Guarded Suspension Design Pattern)的定义、实现与分析,以及在Java中如何通过GuardedObject对象来实现多线程间的结果传递和超时处理。以下是详细的知识点梳理: 1....

    laravel中的fillable和guarded属性详解

    在创建和更新模型时,`fillable` 和 `guarded` 属性是两个非常重要的概念,它们控制着如何通过 `create` 和 `update` 方法批量赋值模型属性。 首先,我们来看 `fillable` 属性。`fillable` 被称为白名单,它定义了...

    aqs-并发编程(2)笔记.pdf

    在并发编程中,保护性暂停模式(Guarded Suspension Design Pattern)是一种常用的同步机制,用于线程间的协作。该模式允许一个线程等待另一个线程的特定操作完成,然后继续执行。在该模式中,线程间共享的某个对象...

    20.9.24aqs-并发编程笔记.pdf

    保护性暂停模式(Guarded Suspension Design Pattern)是一种在多线程环境下实现线程之间安全地传递信息的模式。这种模式主要解决了在并发编程中如何安全高效地进行线程间通信和数据传递的问题。 该模式的基本概念...

    guarded-array:边界检查数组

    var guard = require ( 'guarded-array' ) //First create any old array var array = [ 0 , 1 , 2 , 3 , 4 , 5 ] //Then we protect it using guard! var guardedArray = guard ( array ) //The guarded array ...

    逻辑编程语言:GHC (Guarded Horn Clauses).zip

    史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 并行编程语言 数据分析编程语言 数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 ...

    java线程安全总结.pdf

    8. **Guarded Suspension 模式**:这是一种设计模式,通常使用`wait()`和`notify()`方法来协调线程间的执行顺序,确保特定条件满足时线程才能继续执行。 9. **Double-Check Locking(双重检查锁定)**:这是一种...

    guarded-string:防止在应用程序中意外地在字符串中引入XSSKong

    yarn add guarded-string 用法 重要的! 应该将其用于防止XSS攻击之类的东西,而不是用于隐藏敏感信息。 import guardedString from 'guarded-string' ; const myString = guardedString `My very important (but ...

    Java高并发编程详解:多线程与架构设计 (Java核心技术系列)

    从监控任务的生命周期管理到单线程执行模式,从读写锁分离到不可变对象设计,再到`Future`和`Guarded Suspension`模式,这些模式能够帮助读者构建出既高效又易于维护的并发系统。每个模式都结合了实际的代码实例和...

    java并发编程经典书籍(英文版)

    - **并发模式**:介绍了如Producer-Consumer、Builder、Guarded Suspension等经典并发模式,并提供了Java实现。 - **并发集合**:详述了JUC(Java Util Concurrency)库,包括ArrayList、LinkedList、HashMap等...

    scalac-guardedblocks-plugin:简单的Scala编译器插件

    `scalac-guardedblocks-plugin`就是这样一个插件,它专注于在Scala代码中引入一种新的语法结构,以增强代码的安全性和可读性。 **什么是`scalac-guardedblocks-plugin`** `scalac-guardedblocks-plugin`是一个针对...

    java多线程设计模式详解(PDF及源码)

    第1章 Single Threaded Execution——能通过这座桥的,只有一个人 第2章 Immutable——想破坏它也没办法 第3章 Guarded Suspension——要等到我准备好喔 第4章 Balking——不需要的话,就算了吧 第5章 Producer-...

    concurrent.rar

    8. **并发编程模式**:如生产者-消费者模式、读写锁模式、双检锁(DCL)模式、工兵(Guarded Suspension)模式等,这些模式在并发编程中有着广泛的应用。 9. **并发异常处理**:在并发编程中,死锁、活锁、饥饿等是...

    guarded-bayou-7383

    JAX-RS 模板应用程序这是使用 JAX-RS 的轻量级 RESTful API 的模板。 示例代码是获取当前时间的调用。在本地运行应用程序首先构建: $mvn clean install然后运行它: $ java -cp target/classes:target/dependency/*...

    高性能java系统实现与调优

    - **Guarded Suspension**:在没有足够的资源时暂停执行,避免资源浪费。 - **不变模式**:通过不可变对象减少锁的竞争。 - **生产者-消费者**:通过共享缓冲区协调多个线程的工作。 - **JDK并发框架与优化**: ...

    GuardedCommands:用于模拟防护命令语言的Python程序

    防护命令语言六月7,2018 CS522正式语言和自动机20183111金李涵概括 2018年Spring正式语言和自动机理论项目1〜2 防护命令语言(以下称为GCL)解析和执行功能的实现语句语法说明中止论文说“做任何事情”,但实际上并...

    设计模式.pdf_学习模式必备

    - **Guarded Suspension**:保护性暂停模式,允许线程等待条件满足后再继续执行。 - **Producer-Consumer**:生产者-消费者模式,通过队列来协调生产者和消费者的执行。 - **Worker Thread**:工作线程模式,使用...

Global site tag (gtag.js) - Google Analytics