Design Pattern: Worker Thread 模式

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

Producer Consumer模式专注于Product的生产与消费,至于Product被消费时是作何处理,则不在它的讨论范围之中。 如果您的Product是一个Request,消费者取得Request之后,执行Request中指定的请求方法,也就是使用Command模式,并且您的Request缓冲区还管理了Consumer,就有Worker Thread模式的意思了。在Sequence Diagram上,可以看出Worker Thread同时展现了Producer Consumer模式与Command模式:

利用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()中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值