package javaforce;
/**
* A special thread that will execute Runnable objects placed in queue.
*
* Ex:
* ThreadQueue queue = new ThreadQueue();
* queue.start();
*
* queue.add(new Runnable() { public void run(){ ... }});
* or
* queue.add( () -> { ... } ); //lambda expression (Java 8+)
*
* @author pquiring
*/
import java.util.concurrent.*;
public class ThreadQueue extends Thread {
private BlockingQueue<Runnable> queue;
private boolean active = true;
public ThreadQueue() {
queue = new ArrayBlockingQueue<Runnable>(16);
}
public ThreadQueue(int capacity) {
queue = new ArrayBlockingQueue<Runnable>(capacity);
}
public void run() {
try {
while (active) {
Runnable r = queue.take();
r.run();
}
} catch (Exception e) {
JFLog.log(e);
}
}
/** Closes the ThreadQueue (the queue is first emptied) */
public void close() {
active = false;
//wake up thread if waiting for next Runnable
add(new Runnable() { public void run(){}});
}
/** Adds a Runnable object to ThreadQueue. */
public void add(Runnable r) {
queue.add(r);
}
}