<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 大石頭 閱讀(221) 評論(0)  編輯  收藏 所屬分類: 多線程

    主站蜘蛛池模板: 亚洲国产精品成人久久| 亚洲成网777777国产精品| 亚洲av日韩综合一区在线观看| j8又粗又长又硬又爽免费视频| 免费又黄又硬又爽大片| 免费人成大片在线观看播放| 国产免费久久精品| 边摸边吃奶边做爽免费视频网站 | 中文字幕亚洲电影| 本道天堂成在人线av无码免费| 国产精品亚洲不卡一区二区三区| 特级毛片aaaa免费观看| 国产成人精品久久亚洲高清不卡 | 国产男女爽爽爽免费视频| 国产∨亚洲V天堂无码久久久| 99视频免费观看| 亚洲小说图片视频| 搡女人真爽免费视频大全| 美女啪啪网站又黄又免费| 亚洲高清偷拍一区二区三区| 91在线视频免费观看| 亚洲AV永久纯肉无码精品动漫| 亚洲一区在线免费观看| 亚洲午夜成人精品无码色欲| 免费a级毛片无码a∨性按摩| 99免费在线视频| 亚洲欧洲日产v特级毛片| 国产在线不卡免费播放| 中文字幕看片在线a免费| 亚洲伊人tv综合网色| 免费国产成人高清在线观看网站| 亚洲大码熟女在线观看| 在线a亚洲v天堂网2019无码| 国产91色综合久久免费分享| 日韩精品亚洲专区在线影视| 亚洲成a人片77777kkkk| 成人一a毛片免费视频| 你懂的在线免费观看| 国产精品亚洲片夜色在线| 亚洲一区二区三区无码影院| 亚洲一级免费毛片|