模式8--WorkerThread
来至《java多线程设计模式》
类似ThreadPool,预先产生几个worker线程准备工作。
public void startWorkers() { for (int i = 0; i < threadPool.length; i++) { threadPool[i].start(); } }
package Sample; public class WorkerThread extends Thread { private final Channel channel; public WorkerThread(String name, Channel channel) { super(name); this.channel = channel; } public void run() { while (true) { Request request = channel.takeRequest(); request.execute(); } } }
public synchronized void putRequest(Request request) { while (count >= requestQueue.length) { try { wait(); } catch (InterruptedException e) { } } requestQueue[tail] = request; tail = (tail + 1) % requestQueue.length; count++; notifyAll(); } public synchronized Request takeRequest() { while (count <= 0) { try { wait(); } catch (InterruptedException e) { } } Request request = requestQueue[head]; head = (head + 1) % requestQueue.length; count--; notifyAll(); return request; }