org.mortbay.util

Class ThreadPool

Implemented Interfaces:
LifeCycle, Serializable
Known Direct Subclasses:
IO, SocketChannelListener, ThreadedServer

public class ThreadPool
extends java.lang.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 $
Authors:
Juancarlo A�ez
Greg Wilkins

Nested Class Summary

static class
ThreadPool.PoolThread
Pool Thread class.

Field Summary

static String
__DAEMON
static 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.
String
getName()
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(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(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(String name)
Set the Pool name.
void
setPoolName(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(Thread thread, Object job)
Stop a Job.

Field Details

__DAEMON

public static final String __DAEMON

__PRIORITY

public static final String __PRIORITY

Constructor Details

ThreadPool

public ThreadPool()

Method Details

getIdleThreads

public int getIdleThreads()
Get the number of idle threads in the pool. Delegated to the named or anonymous Pool.
Returns:
Number of threads

getMaxIdleTimeMs

public int getMaxIdleTimeMs()
Get the maximum thread idle time. Delegated to the named or anonymous Pool.
Returns:
Max idle time in ms.

getMaxThreads

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

getMinThreads

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

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

getThreadsPriority

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

handle

protected void handle(Object job)
            throws 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.

isDaemon

public boolean isDaemon()
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.

join

public void join()

run

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

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.

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.

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

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()
            throws InterruptedException

start

public void start()
            throws Exception
Start the LifeCycle.
Specified by:
start in interface LifeCycle

stop

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

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.