細心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

          BlogJava 聯系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
          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()中。

          posted on 2007-04-17 10:56 張金鵬 閱讀(540) 評論(0)  編輯  收藏 所屬分類: 多執行緒模式
          主站蜘蛛池模板: 岫岩| 襄樊市| 靖西县| 韶山市| 东丰县| 灌南县| 河曲县| 库车县| 平江县| 晋江市| 和林格尔县| 毕节市| 临澧县| 屏东县| 普格县| 尚义县| 砚山县| 抚远县| 兴安县| 深水埗区| 成都市| 华亭县| 营口市| 厦门市| 衡阳县| 珠海市| 盐边县| 师宗县| 砚山县| 德阳市| 武汉市| 防城港市| 普格县| 商城县| 昌邑市| 静安区| 共和县| 田东县| 大同市| 澄迈县| 鸡西市|