package com.activequant.utils.worker; import java.util.concurrent.LinkedBlockingQueue; import org.apache.log4j.Logger; public class WorkerThread<T> implements Runnable { private LinkedBlockingQueue<T> queue; private Worker<T> worker; private Logger log = Logger.getLogger(WorkerThread.class); public WorkerThread(LinkedBlockingQueue<T> queue, Worker<T> worker) { this.queue = queue; this.worker = worker; } public void run() { try { while (worker.runFlag()) { T t = queue.take(); worker.process(t); // signalling to the worker that the queue is now empty. if(queue.isEmpty())worker.queueEmpty(); } } catch (Exception ex) { log.error("Error while processing work load. ", ex); } } }