JaxWsThreadPoolExecutor.java :  » Media » projectopenfarm » openfarm » multithreading » threadpools » Java Open Source

Java Open Source » Media » projectopenfarm 
projectopenfarm » openfarm » multithreading » threadpools » JaxWsThreadPoolExecutor.java
/**
 * 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();
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.