org.mortbay.util

Class ThreadPool

public class ThreadPool extends Object implements LifeCycle, 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 Ao?=ez Greg Wilkins

Nested Class Summary
static classThreadPool.PoolThread
Pool Thread class.
Field Summary
static String__DAEMON
static String__PRIORITY
Constructor Summary
ThreadPool()
Method Summary
intgetIdleThreads()
Get the number of idle threads in the pool.
intgetMaxIdleTimeMs()
Get the maximum thread idle time.
intgetMaxThreads()
Set the maximum number of threads.
intgetMinThreads()
Get the minimum number of threads.
StringgetName()
StringgetPoolName()
intgetThreads()
Get the number of threads in the pool.
intgetThreadsPriority()
Get the priority of the pool threads.
protected voidhandle(Object job)
Handle a job.
booleanisDaemon()
Delegated to the named or anonymous Pool.
booleanisStarted()
Is the pool running jobs.
voidjoin()
voidrun(Object job)
Run job.
voidsetDaemon(boolean daemon)
Delegated to the named or anonymous Pool.
voidsetMaxIdleTimeMs(int maxIdleTimeMs)
Set the maximum thread idle time.
voidsetMaxStopTimeMs(int ms)
Set Max Read Time.
voidsetMaxThreads(int maxThreads)
Set the maximum number of threads.
voidsetMinThreads(int minThreads)
Set the minimum number of threads.
voidsetName(String name)
Set the Pool name.
voidsetPoolName(String name)
voidsetThreadsPriority(int priority)
Set the priority of the pool threads.
voidshrink()
voidstart()
voidstop()
Stop the ThreadPool.
protected voidstopJob(Thread thread, Object job)
Stop a Job.

Field Detail

__DAEMON

public static final String __DAEMON

__PRIORITY

public static final String __PRIORITY

Constructor Detail

ThreadPool

public ThreadPool()

Method Detail

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: ThreadPool

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: ThreadPool

getMaxThreads

public int getMaxThreads()
Set the maximum number of threads. Delegated to the named or anonymous Pool.

Returns: maximum number of threads.

See Also: ThreadPool

getMinThreads

public int getMinThreads()
Get the minimum number of threads. Delegated to the named or anonymous Pool.

Returns: minimum number of threads.

See Also: ThreadPool

getName

public String getName()

Returns: The name of the ThreadPool.

getPoolName

public String getPoolName()

Deprecated: use getName()

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: ThreadPool

getThreadsPriority

public int getThreadsPriority()
Get the priority of the pool threads.

Returns: the priority of the pool threads.

handle

protected void handle(Object job)
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: InterruptedException

isDaemon

public boolean isDaemon()
Delegated to the named or anonymous Pool.

isStarted

public boolean isStarted()
Is the pool running jobs.

Returns: True if start() has been called.

join

public void join()

run

public void run(Object job)
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.

setDaemon

public void setDaemon(boolean daemon)
Delegated to the named or anonymous Pool.

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: ThreadPool

setMaxStopTimeMs

public void setMaxStopTimeMs(int ms)

Deprecated: maxIdleTime is used instead.

Set Max Read Time.

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: ThreadPool

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: ThreadPool

setName

public void setName(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.

setPoolName

public void setPoolName(String name)

Deprecated: use setName(String)

setThreadsPriority

public void setThreadsPriority(int priority)
Set the priority of the pool threads.

Parameters: priority the new thread priority.

shrink

public void shrink()

start

public void start()

stop

public void stop()
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.

stopJob

protected void stopJob(Thread thread, 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.