## org.mortbay.util
Class ThreadPool

    java.lang.Object
      |
      +--org.mortbay.util.ThreadPool

All Implemented Interfaces:
  LifeCycle, java.io.Serializable

Direct Known Subclasses:
  IO, ThreadedServer

public class ThreadPool
extends java.lang.Object
implements LifeCycle, java.io.Serializable

A pool of threads.

Avoids the expense of thread creation by pooling threads after their run methods exit for reuse.

If the maximum pool size is reached, jobs wait for a free thread. By default there is no maximum pool size. Idle threads timeout and terminate until the minimum number of threads are running.

This implementation uses the run(Object) method to place a job on a queue, which is read by the getJob(timeout) method. Derived implementations may specialize getJob(timeout) to obtain jobs from other sources without queing overheads.

Version:
  $Id: ThreadPool.java,v 1.27.2.5 2004/03/30 10:28:42 gregwilkins Exp $
Author:
  Juancarlo A�ez <juancarlo@modelistica.com>, Greg Wilkins <gregw@mortbay.com>
See Also:
  Serialized Form

Nested Class Summary
`static class` `ThreadPool.PoolThread` Pool Thread class.

Field Summary
`static java.lang.String` `__DAEMON`
`static java.lang.String` `__PRIORITY`

Constructor Summary
`ThreadPool()`

Method Summary
`int` `getIdleThreads()` Get the number of idle threads in the pool.
`int` `getMaxIdleTimeMs()` Get the maximum thread idle time.
`int` `getMaxThreads()` Set the maximum number of threads.
`int` `getMinThreads()` Get the minimum number of threads.
`java.lang.String` `getName()`
`java.lang.String` `getPoolName()`
`int` `getThreads()` Get the number of threads in the pool.
`int` `getThreadsPriority()` Get the priority of the pool threads.
`boolean` `isDaemon()` Delegated to the named or anonymous Pool.
`boolean` `isStarted()` Is the pool running jobs.
`void` `join()`
`void` `run(java.lang.Object job)` Run job.
`void` `setDaemon(boolean daemon)` Delegated to the named or anonymous Pool.
`void` `setMaxIdleTimeMs(int maxIdleTimeMs)` Set the maximum thread idle time.
`void` `setMaxStopTimeMs(int ms)` Deprecated. maxIdleTime is used instead.
`void` `setMaxThreads(int maxThreads)` Set the maximum number of threads.
`void` `setMinThreads(int minThreads)` Set the minimum number of threads.
`void` `setName(java.lang.String name)`
`void` `setPoolName(java.lang.String name)` Set the Pool name.
`void` `setThreadsPriority(int priority)` Set the priority of the pool threads.
`void` `shrink()`
`void` `start()` Start the LifeCycle.
`void` `stop()` Stop the ThreadPool.

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### __DAEMON

    public static final java.lang.String __DAEMON

See Also:
  Constant Field Values

### __PRIORITY

    public static final java.lang.String __PRIORITY

See Also:
  Constant Field Values

Constructor Detail

### ThreadPool

    public ThreadPool()

Method Detail

### getName

    public java.lang.String getName()

  Returns:
    The name of the ThreadPool.

### setName

    public void setName(java.lang.String name)

  Parameters:
    `name` - Name of the ThreadPool to use when naming Threads.

### getPoolName

    public java.lang.String getPoolName()

  Returns:
    Name of the Pool instance this ThreadPool uses or null for an anonymous private pool.

### setPoolName

    public void setPoolName(java.lang.String name)

  Set the Pool name. All ThreadPool instances with the same Pool name will share the same Pool instance. Thus they will share the same max, min and available Threads. The field values of the first ThreadPool to call setPoolName with a specific name are used for the named Pool. Subsequent ThreadPools that join the name pool will loose their private values.

  Parameters:
    `name` - Name of the Pool instance this ThreadPool uses or null for an anonymous private pool.

### isDaemon

    public boolean isDaemon()

  Delegated to the named or anonymous Pool.

### setDaemon

    public void setDaemon(boolean daemon)

  Delegated to the named or anonymous Pool.

### isStarted

    public boolean isStarted()

  Is the pool running jobs.

  Specified by:
    `isStarted` in interface `LifeCycle`
  Returns:
    True if start() has been called.

### getThreads

    public int getThreads()

  Get the number of threads in the pool. Delegated to the named or anonymous Pool.

  Returns:
    Number of threads
  See Also:
    `getIdleThreads()`

### getIdleThreads

    public int getIdleThreads()

  Get the number of idle threads in the pool. Delegated to the named or anonymous Pool.

  Returns:
    Number of threads
  See Also:
    `getThreads()`

### getMinThreads

    public int getMinThreads()

  Get the minimum number of threads. Delegated to the named or anonymous Pool.

  Returns:
    minimum number of threads.
  See Also:
    `setMinThreads(int)`

### setMinThreads

    public void setMinThreads(int minThreads)

  Set the minimum number of threads. Delegated to the named or anonymous Pool.

  Parameters:
    `minThreads` - minimum number of threads
  See Also:
    `getMinThreads()`

### getMaxThreads

    public int getMaxThreads()

  Set the maximum number of threads. Delegated to the named or anonymous Pool.

  Returns:
    maximum number of threads.
  See Also:
    `setMaxThreads(int)`

### setMaxThreads

    public void setMaxThreads(int maxThreads)

  Set the maximum number of threads. Delegated to the named or anonymous Pool.

  Parameters:
    `maxThreads` - maximum number of threads.
  See Also:
    `getMaxThreads()`

### getMaxIdleTimeMs

    public int getMaxIdleTimeMs()

  Get the maximum thread idle time. Delegated to the named or anonymous Pool.

  Returns:
    Max idle time in ms.
  See Also:
    `setMaxIdleTimeMs(int)`

### setMaxIdleTimeMs

    public void setMaxIdleTimeMs(int maxIdleTimeMs)

  Set the maximum thread idle time. Threads that are idle for longer than this period may be stopped. Delegated to the named or anonymous Pool.

  Parameters:
    `maxIdleTimeMs` - Max idle time in ms.
  See Also:
    `getMaxIdleTimeMs()`

### getThreadsPriority

    public int getThreadsPriority()

  Get the priority of the pool threads.

  Returns:
    the priority of the pool threads.

### setThreadsPriority

    public void setThreadsPriority(int priority)

  Set the priority of the pool threads.

  Parameters:
    `priority` - the new thread priority.

### setMaxStopTimeMs

    public void setMaxStopTimeMs(int ms)

  Deprecated. maxIdleTime is used instead.

  Set Max Read Time.

### start

    public void start()
               throws java.lang.Exception

  Description copied from interface: `LifeCycle`
  Start the LifeCycle.

  Specified by:
    `start` in interface `LifeCycle`
  Throws:
    `java.lang.Exception` - An arbitrary exception may be thrown.

### stop

    public void stop()
              throws java.lang.InterruptedException

  Stop the ThreadPool. New jobs are no longer accepted,idle threads are interrupted and stopJob is called on active threads. The method then waits min(getMaxStopTimeMs(),getMaxIdleTimeMs()), for all jobs to stop, at which time killJob is called.

  Specified by:
    `stop` in interface `LifeCycle`
  Throws:
    `java.lang.InterruptedException` - Stopping a lifecycle is rarely atomic and may be interrupted by another thread. If this happens InterruptedException is throw and the component will be in an indeterminant state and should probably be discarded.

### join

    public void join()

### shrink

    public void shrink()
                throws java.lang.InterruptedException

    `java.lang.InterruptedException`

### run

    public void run(java.lang.Object job)
             throws java.lang.InterruptedException

  Run job. Give a job to the pool.

  Parameters:
    `job` - If the job is derived from Runnable, the run method is called, otherwise it is passed as the argument to the handle method.
    `java.lang.InterruptedException`

Copyright © 2000 Mortbay Consulting Pty. Ltd. All Rights Reserved.