⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guardedsuspension.htm

📁 DesignPattern基于Java方面最好的书
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>





  
  
  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">





  
  
  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">





  
  
  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">





  
  
  
  
  
  <title>Guarded Suspension 模式</title>
</head>


<body>





<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>





<h1><a href="CppGossip.html">Design Pattern:&nbsp;Guarded Suspension 模式</a></h1>

考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Request),为了不丢失客户的请求,它要维持一个缓冲区,客户的请求会先储存至缓冲区
中,而伺服器会从缓冲区中取出请求并执行,如果缓冲区中没有请求,则伺服器就等待,直到被通知有新的请求存入缓冲区中,伺服器再度进行请求的执行。<br>
<br>
关于这个描述的一个简单 UML 顺序图如下所示: <br>
<div style="text-align: center;"><img style="width: 542px; height: 369px;" alt="GuardedSuspension" title="GuardedSuspension" src="images/guardedSuspension.jpg"><br>
</div>
<br>

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

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

<br>
Guarded Suspension模式关注的是执行的流程架构,以Java来实现这个架构的话如下所示: <br>

<ul>
  <li> RequestQueue.java
  </li>
</ul>

<pre>public class RequestQueue {<br>    private java.util.LinkedList queue;<br>    public RequestQueue() {<br>        queue = new java.util.LinkedList();<br>    }<br><br>    public synchronized Request getRequest() {<br>        while(queue.size() &lt;= 0) {<br>            try {<br>                wait();<br>            }<br>            catch(InterruptedException e) {}<br>        }<br>        return (Request) queue.removeFirst();<br>    }<br><br>    public synchronized void putRequest(Request request) {<br>        queue.addLast(request);<br>        notifyAll();<br>    }<br>} <br></pre>

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





</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -