package jutil; import java.util.*; /** * The thread manager is an extensible class that safely manages * a pool of worker threads. */ public class ThreadManager { /** * The pool of worker threads to be managed. */ private List workers = new ArrayList(); /** * clear workers list. */ public void clear() { workers.clear(); } /** * Add a worker thread to the pool. * @param worker the worker to be added to the list. */ public void add(WorkerThread worker) { workers.add(worker); } /** * Safely pauses all workers. */ public void pauseAll() { Iterator p = workers.iterator(); while(p.hasNext()) { WorkerThread worker = (WorkerThread)p.next(); worker.pause(); } } /** * Safely unpauses all the workers. */ public void unpauseAll() { Iterator p = workers.iterator(); while(p.hasNext()) { WorkerThread worker = (WorkerThread)p.next(); worker.unpause(); } } /** * Safely halts all workers */ public void haltAll() { Iterator p = workers.iterator(); while(p.hasNext()) { WorkerThread worker = (WorkerThread)p.next(); worker.halt(); } } /** * Start all workers. */ public void startAll() { Iterator p = workers.iterator(); while(p.hasNext()) { WorkerThread worker = (WorkerThread)p.next(); worker.start(); } } public String toString() { return workers.toString(); } /** * Joins all workers. */ public void joinAll() { joinAll(0); } /** * Join all workers until the stop or a timeout occurs. * @param msecs number of milliseconds until a timeout */ public void joinAll(long msecs) { Iterator p = workers.iterator(); while(p.hasNext()) { WorkerThread worker = (WorkerThread)p.next(); try { if (worker.isAlive()) worker.join(msecs); if (worker.isAlive()) worker.halt(); } catch(InterruptedException ie) { System.err.println(ie.getMessage()); if (worker.isAlive()) worker.destroy(); } finally { System.out.println(worker.getName() + " has died"); } } System.out.println("The manager will now die ... "); } }