`

Design Pattern: Guarded Suspension 模式

UML 
阅读更多

考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Request),为了不丢失客户的请求,它要维持一个缓冲区,客户的请求会先储存至缓冲区中,而伺服器会从缓冲区中取出请求并执行,如果缓冲区中没有请求,则伺服器就等待,直到被通知有新的请求存入缓冲区中,伺服器再度进行请求的执行。

关于这个描述的一个简单 UML 顺序图如下所示:

首先要考虑到,缓冲区会同时被两个以上的执行绪进行存取,即伺服器的请求处理执行绪与客户端执行绪,所以必须对缓冲区进行防护。

再来是当缓冲区中没有请求时,伺服器必须等待直到被通知有新的请求。

Guarded Suspension模式关注的是执行的流程架构,以Java来实现这个架构的话如下所示:
  • RequestQueue.java
public class RequestQueue {
    private java.util.LinkedList queue;
    public RequestQueue() {
        queue = new java.util.LinkedList();
    }

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

    public synchronized void putRequest(Request request) {
        queue.addLast(request);
        notifyAll();
    }
} 


一个例子是多人聊天伺服器,请求可能只是一个客户端送出的聊天讯息,聊天讯息会先存至缓冲区中,伺服器会不断的从缓冲区中取出聊天讯息并发给客户端,如果缓冲区中没有新讯息,则伺服器就进入等待,直到有一个客户端发出聊天讯息并存入缓冲区中,此时伺服器再度被通知,然后再度取出讯息并进行发送。

分享到:
评论

相关推荐

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

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

    aqs-并发编程笔记.pdf

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

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

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

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

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

    20.9.24aqs-并发编程笔记.pdf

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

    设计模式笔记

    - **Guarded Suspension(受保护的暂停模式)**:当一个线程调用另一个线程的同步方法时,如果该同步方法没有准备好,则该线程将阻塞,直到该同步方法准备好为止。 - **Producer Consumer(生产者消费者模式)**:...

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

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

    Java多线程详解

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

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

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

    java线程安全总结.pdf

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

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

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

    laravel中的fillable和guarded属性详解

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

    高性能java系统实现与调优

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

    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 ...

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

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

    concurrent.rar

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

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

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

    CSP源代码.zip_CSP的实现代码_csp 共空间模式_csp代码公示_csp源代码_mainnae

    **共空间模式(CSP,Communicating Sequential Processes)**是一种并发程序设计的理论框架,由英国计算机科学家C.A.R. Hoare在1978年提出。CSP的核心概念是进程间的通信,它通过消息传递来实现不同并发执行的任务...

Global site tag (gtag.js) - Google Analytics