Class SimpleThreadPool

  • All Implemented Interfaces:
    ThreadPool

    public class SimpleThreadPool
    extends Object
    implements ThreadPool

    SimpleThreadPool is a basic implementation of ThreadPool for use where we don't wish to introduce a dependency on a 3rd-party pool. In general, objects which require a pool should only use the interface and parameterize such that other implementations may be dropped in in place of this one, possibly using this one as a fallback.

    This class offers a service for running Runnables using multiple threads, the number of which is specified in the constructor. Runnables are queued in a simple FIFO queue. The worker threads wait on the queue when it is empty and are notified when a new Runnable is submitted.

    This implementation will prevent an application from exiting until stopThreads() is called unless the pool contains daemon threads.

    Since:
    1.3
    Author:
    Keith James
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected int priority  
      protected org.biojava.utils.SimpleThreadPool.PooledThread[] threads  
    • Constructor Summary

      Constructors 
      Constructor Description
      SimpleThreadPool()
      Creates a new SimpleThreadPool containing 4 non-daemon threads and starts them.
      SimpleThreadPool​(int threadCount, boolean daemon)
      Creates a new SimpleThreadPool containing the specified number of threads and starts them.
      SimpleThreadPool​(int threadCount, boolean daemon, int priority)
      Creates a new SimpleThreadPool containing the specified number of threads and starts them.
    • Field Detail

      • threads

        protected org.biojava.utils.SimpleThreadPool.PooledThread[] threads
    • Constructor Detail

      • SimpleThreadPool

        public SimpleThreadPool()
        Creates a new SimpleThreadPool containing 4 non-daemon threads and starts them. The threads have priority Thread.NORM_PRIORITY. Because threads are non-deamon you will need to call stopThreads() to terminate them.
      • SimpleThreadPool

        public SimpleThreadPool​(int threadCount,
                                boolean daemon)
        Creates a new SimpleThreadPool containing the specified number of threads and starts them. The threads have priority Thread.NORM_PRIORITY.
        Parameters:
        threadCount - an int thread count.
        daemon - a boolean indicating whether the threads should be daemons. If threads are non-deamon you will need to call stopThreads() to terminate them.
      • SimpleThreadPool

        public SimpleThreadPool​(int threadCount,
                                boolean daemon,
                                int priority)
        Creates a new SimpleThreadPool containing the specified number of threads and starts them.
        Parameters:
        threadCount - an int thread count.
        daemon - a boolean indicating whether the threads should be daemons. If threads are non-deamon you will need to call stopThreads() to terminate them.
        priority - an int priority for the threads.
    • Method Detail

      • addRequest

        public void addRequest​(Runnable task)
        Description copied from interface: ThreadPool
        addRequest requests that a Runnable be scheduled to be run by one of the threads in the pool.
        Specified by:
        addRequest in interface ThreadPool
        Parameters:
        task - a Runnable.
      • stopThreads

        public void stopThreads()
        Waits for all working threads to return and then stops them. If the thread pool contains non-daemon threads you will have to call this method to make your program return.
        Specified by:
        stopThreads in interface ThreadPool
        Throws:
        IllegalStateException - if the pool is already stopped.
      • waitForThreads

        public void waitForThreads()
        Description copied from interface: ThreadPool
        waitForThreads temporarily closes the pool to new requests until such time as the current request queue has been emptied and all running tasks completed.
        Specified by:
        waitForThreads in interface ThreadPool
      • threadsWorking

        public int threadsWorking()
        threadsWorking returns the number of threads currently performing work.
        Returns:
        an int.
      • threadsIdle

        public int threadsIdle()
        threadsIdle returns the number of threads currently waiting for work.
        Returns:
        an int.
      • requestsQueued

        public int requestsQueued()
        requestsQueued returns the number of Runnables currently queued.
        Returns:
        an int.
      • threadsAlive

        protected int threadsAlive()
        threadsAlive returns the number of threads currently alive.
        Returns:
        an int.
      • nextRequest

        protected Runnable nextRequest()
        nextRequest gets the next Runnable from the queue. This method blocks if the queue is empty and the pool has not stopped. If the pool has stopped it returns null.
        Returns:
        a Runnable or null if the pool has been stopped.