org.mortbay.util
Class ThreadPool

java.lang.Object
  extended by org.mortbay.util.ThreadPool
All Implemented Interfaces:
java.io.Serializable, LifeCycle
Direct Known Subclasses:
IO, SocketChannelListener, 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. 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.41 2005/08/13 00:01:28 gregwilkins Exp $
Author:
Juancarlo A´┐Żez , Greg Wilkins
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()
          Deprecated. use getName()
 int getThreads()
          Get the number of threads in the pool.
 int getThreadsPriority()
          Get the priority of the pool threads.
protected  void handle(java.lang.Object job)
          Handle a job.
 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)
          Set the Pool name.
 void setPoolName(java.lang.String name)
          Deprecated. use setName(String)
 void setThreadsPriority(int priority)
          Set the priority of the pool threads.
 void shrink()
           
 void start()
          Start the LifeCycle.
 void stop()
          Stop the ThreadPool.
protected  void stopJob(java.lang.Thread thread, java.lang.Object job)
          Stop a Job.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, 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)
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.

getPoolName

public java.lang.String getPoolName()
Deprecated. use getName()


setPoolName

public void setPoolName(java.lang.String name)
Deprecated. use setName(String)


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
Throws:
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.
Throws:
java.lang.InterruptedException

handle

protected void handle(java.lang.Object job)
               throws java.lang.InterruptedException
Handle a job. Called by the allocated thread to handle a job. If the job is a Runnable, it's run method is called. Otherwise this method needs to be specialized by a derived class to provide specific handling.

Parameters:
job - The job to execute.
Throws:
java.lang.InterruptedException

stopJob

protected void stopJob(java.lang.Thread thread,
                       java.lang.Object job)
Stop a Job. This method is called by the Pool if a job needs to be stopped. The default implementation does nothing and should be extended by a derived thread pool class if special action is required.

Parameters:
thread - The thread allocated to the job, or null if no thread allocated.
job - The job object passed to run.


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