/**
* Copyright (c) 2009 - 2010 - OpenFARM
* Licence: MIT
*
* @Author Filipe Martins
* @Date 11-May-2010
*/
package openfarm.multithreading.threadpools;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class JaxWsThreadPoolExecutor extends ThreadPoolExecutor
{
private static final int poolSize = 10;
private boolean isPaused;
private ReentrantLock pauseLock = new ReentrantLock();
private Condition unpaused = pauseLock.newCondition();
public JaxWsThreadPoolExecutor()
{
super(poolSize, poolSize,0L,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(poolSize));
}
protected void beforeExecute(Thread t, Runnable r)
{
super.beforeExecute(t, r);
pauseLock.lock();
try
{
while (isPaused)
unpaused.await();
} catch (InterruptedException ie)
{
t.interrupt();
} finally
{
pauseLock.unlock();
}
}
public void pause()
{
pauseLock.lock();
try
{
isPaused = true;
} finally
{
pauseLock.unlock();
}
}
public void resume()
{
pauseLock.lock();
try
{
isPaused = false;
unpaused.signalAll();
} finally
{
pauseLock.unlock();
}
}
}
|