package com.jpexs.proxy;
public class ReusableThread extends Thread {
private ThreadPool pool = null;
private Runnable runnable = null;
private boolean alive = true;
private long lastrun = 0;
private int used = 0;
public ReusableThread(ThreadPool pool) {
this.pool = pool;
}
public synchronized void setRunnable(Runnable runnable) {
this.runnable = runnable;
notify();
}
public synchronized void terminate() {
alive = false;
notify();
}
public long getLastRunTime() {
return lastrun;
}
public int useCount() {
return used;
}
public void run() {
while (alive) {
setName("ReusableThread: idle");
while (runnable == null && alive) {
synchronized (this) {
try {
wait();
} catch (InterruptedException ie) {
}
}
}
if (alive) {
setName("ReusableThread: busy");
setPriority(Thread.NORM_PRIORITY);
lastrun = System.currentTimeMillis();
used++;
runnable.run();
runnable = null;
pool.put(this);
}
}
}
}