package gov.nih.nci.cagrid.common; import EDU.oswego.cs.dl.util.concurrent.CountDown; import EDU.oswego.cs.dl.util.concurrent.LinkedQueue; import EDU.oswego.cs.dl.util.concurrent.PooledExecutor; /** * @author <A href="mailto:langella@bmi.osu.edu">Stephen Langella</A> * @author <A href="mailto:hastings@bmi.osu.edu">Shannon Hastings</A> * @author <A href="mailto:oster@bmi.osu.edu">Scott Oster</A> * @author <A HREF="MAILTO:ervin@bmi.osu.edu">David W. Ervin </A> * @created Dec 18, 2003 * @version $Id: ThreadManager.java,v 1.2 2007-04-05 16:42:59 langella Exp $ */ public class ThreadManager { private static int POOL_SIZE = 20; private PooledExecutor workerPool; public ThreadManager() { workerPool = new PooledExecutor(new LinkedQueue(), POOL_SIZE); workerPool.setMinimumPoolSize(POOL_SIZE); } public void executeInBackground(Runner task) throws InterruptedException { workerPool.execute(task); } public void execute(Runner task) throws InterruptedException { CountDown barrier = new CountDown(1); task.setSync(barrier); workerPool.execute(task); barrier.acquire(); } public void executeGroup(RunnerGroup group) throws InterruptedException { CountDown barrier = new CountDown(group.size()); for (int i = 0; i < group.size(); i++) { Runner task = group.get(i); task.setSync(barrier); workerPool.execute(task); } barrier.acquire(); } public void executeGroupInBackground(RunnerGroup group) throws InterruptedException { for (int i = 0; i < group.size(); i++) { Runner task = group.get(i); workerPool.execute(task); } } }