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); } } } }