<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    keep moving!

    We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
    隨筆 - 37, 文章 - 2, 評論 - 3, 引用 - 0
    數據加載中……

    Design Pattern: Worker Thread 模式

    Worker Thread模式在Request的管理上像是 Producer Consumer 模式,在Request的行為上像是 Command 模式

    Producer Consumer模式專注於Product的生產與消費,至於Product被消費時是作何處理,則不在它的討論範圍之中。
    WorkerThread

    如果您的Product是一個Request,消費者取得Request之後,執行Request中指定的請求方法,也就是使用Command模式,並且您的Request緩衝區還管理了Consumer,就有Worker Thread模式的意思了。
    WorkerThread

    在Sequence Diagram上,可以看出Worker Thread同時展現了Producer Consumer模式與Command模式:
    WorkThread
    利用Java實現的一個Channel類如下所示:
    • Channel.java
    import java.util.LinkedList; 

    public class Channel {
    private LinkedList requests;
    private WorkerThread[] workerThreads;

    public Channel(int threadNumber) {
    requests = new LinkedList();
    workerThreads = new WorkerThread[threadNumber];
    for(int i = 0; i < workerThreads.size(); i++) {
    workerThreads[i] = new WorkerThread();
    workerThreads[i].start();
    }
    }

    public synchronized void putRequest(Request request) {
    while(requests.size() >= 2) { // 容量限制為 2
    try {
    wait();
    }
    catch(InterruptedException e) {}
    }

    requests.addLast(request);
    notifyAll();
    }

    public synchronized Request getProduct() {
    while(requests.size() <= 0) {
    try {
    wait();
    }
    catch(InterruptedException e) {}
    }

    Request request = (Request) requests.removeFirst();
    notifyAll();

    return request;
    }
    }

    Request類與WorkerThread類之間採的Command模式:
    • Request.java
    public class Request() { 
    // ....

    public void execute() {
    // do some work....
    }
    }

    • WorkerThread.java
    public class WorkerThread extends Thread { 
    // ...

    public void run() {
    while(true) {
    Request request = channel.getRequest();
    request.execute();
    }
    }
    }

    就行為上,WorkerThread就是有請求來了就作,如果沒有請求,則所有的WorkerThread就等待,直到有新的工作進來而通知它們,取得請求的WorkerThread要作的工作,就直接定義在execute()中。



    張金鵬 2007-04-17 10:56 發表評論

    文章來源:http://www.tkk7.com/jesson2005/articles/111196.html

    posted on 2008-09-07 11:06 大石頭 閱讀(222) 評論(0)  編輯  收藏 所屬分類: 多線程

    主站蜘蛛池模板: 日韩在线视频免费| 国产成人精品久久亚洲高清不卡| 免费看一级高潮毛片| 免费无码看av的网站| 久久亚洲国产最新网站| 福利免费观看午夜体检区| 亚洲国产精品张柏芝在线观看| 日本在线看片免费人成视频1000| 亚洲VA中文字幕不卡无码| 18禁超污无遮挡无码免费网站| 国产亚洲精品一品区99热| 黄色网站软件app在线观看免费 | 波多野结衣中文字幕免费视频 | 亚洲熟女精品中文字幕| 午夜私人影院免费体验区| 亚洲一卡2卡三卡4卡无卡下载| 毛片免费观看的视频在线| 美女啪啪网站又黄又免费| 亚洲成a人片在线观看国产| 久久成人18免费网站| 亚洲av日韩av不卡在线观看| 中文字幕在线免费观看| 91丁香亚洲综合社区| 国产美女a做受大片免费| 一级一黄在线观看视频免费| 国产亚洲精AA在线观看SEE | 91精品国产免费入口| 亚洲乱码一二三四区麻豆| 免费羞羞视频网站| 成人无码视频97免费| 亚洲视频免费在线播放| 夭天干天天做天天免费看| 成人免费观看男女羞羞视频| 亚洲av无码一区二区三区网站 | 亚洲AV无码一区二区乱孑伦AS| 国产一卡二卡四卡免费| 思思久久99热免费精品6| 精品日韩亚洲AV无码| 五月婷婷亚洲综合| 在线观看免费视频资源| 日韩成人精品日本亚洲|