org.apache.tomcat.util.threads
Class ThreadPool

java.lang.Object
  extended byorg.apache.tomcat.util.threads.ThreadPool

public class ThreadPool
extends java.lang.Object

A thread pool that is trying to copy the apache process management. Should we remove this in favor of Doug Lea's thread package?

Author:
Gal Shachor, Yoav Shapira

Nested Class Summary
static class ThreadPool.ControlRunnable
          A Thread object that executes various actions ( ThreadPoolRunnable ) under control of ThreadPool
static class ThreadPool.MonitorRunnable
          Periodically execute an action - cleanup in this case
static interface ThreadPool.ThreadPoolListener
          Interface to allow applications to be notified when a threads are created and stopped.
 
Field Summary
protected  int currentThreadCount
           
protected  int currentThreadsBusy
           
protected  boolean isDaemon
           
protected  java.util.Vector listeners
           
static int MAX_SPARE_THREADS
           
static int MAX_THREADS
           
static int MAX_THREADS_MIN
           
protected  int maxSpareThreads
           
protected  int maxThreads
           
static int MIN_SPARE_THREADS
           
protected  int minSpareThreads
           
protected  ThreadPool.MonitorRunnable monitor
           
protected  java.lang.String name
          Name of the threadpool
protected  ThreadPool.ControlRunnable[] pool
           
protected  int sequence
          Sequence.
protected  boolean stopThePool
           
protected  int threadPriority
          Thread priority.
protected  java.util.Hashtable threads
          The threads that are part of the pool.
static int WORK_WAIT_TIMEOUT
           
 
Constructor Summary
ThreadPool()
          Constructor.
 
Method Summary
 void addThread(java.lang.Thread t, ThreadPool.ControlRunnable cr)
           
 void addThreadPoolListener(ThreadPool.ThreadPoolListener tpl)
           
protected  void adjustLimits()
           
protected  void checkSpareControllers()
          Called by the monitor thread to harvest idle threads.
static ThreadPool createThreadPool(boolean jmx)
          Create a ThreadPool instance.
 int getCurrentThreadCount()
           
 int getCurrentThreadsBusy()
           
 boolean getDaemon()
           
static int getDebug()
           
 int getMaxSpareThreads()
           
 int getMaxThreads()
           
 int getMinSpareThreads()
           
 ThreadPool.MonitorRunnable getMonitor()
           
 java.lang.String getName()
           
 int getSequence()
           
 java.lang.String[] getThreadParam()
          Return an array with the current "param" ( XXX better name ? ) of each thread.
 int getThreadPriority()
          Returns the priority level of current and future threads in this pool.
 java.util.Enumeration getThreads()
           
 java.lang.String[] getThreadStatus()
          Return an array with the status of each thread.
 boolean isDaemon()
           
protected  void notifyThreadEnd(ThreadPool.ControlRunnable c)
          Inform the pool that the specific thread finish.
protected  void openThreads(int toOpen)
          Create missing threads.
 void removeThread(java.lang.Thread t)
           
protected  void returnController(ThreadPool.ControlRunnable c)
          Returns the thread to the pool.
 void run(java.lang.Runnable r)
           
 void runIt(ThreadPoolRunnable r)
          Executes a given Runnable on a thread in the pool, block if needed.
 void setDaemon(boolean b)
          The default is true - the created threads will be in daemon mode.
 void setMaxSpareThreads(int maxSpareThreads)
           
 void setMaxThreads(int maxThreads)
           
 void setMinSpareThreads(int minSpareThreads)
           
 void setName(java.lang.String name)
           
 void setThreadPriority(int threadPriority)
          Sets the thread priority for current and future threads in this pool.
 void shutdown()
          Stop the thread pool
 void start()
           
 java.lang.String threadStatusString()
          Debug display of the stage of each thread.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_THREADS

public static final int MAX_THREADS
See Also:
Constant Field Values

MAX_THREADS_MIN

public static final int MAX_THREADS_MIN
See Also:
Constant Field Values

MAX_SPARE_THREADS

public static final int MAX_SPARE_THREADS
See Also:
Constant Field Values

MIN_SPARE_THREADS

public static final int MIN_SPARE_THREADS
See Also:
Constant Field Values

WORK_WAIT_TIMEOUT

public static final int WORK_WAIT_TIMEOUT
See Also:
Constant Field Values

pool

protected ThreadPool.ControlRunnable[] pool

monitor

protected ThreadPool.MonitorRunnable monitor

maxThreads

protected int maxThreads

minSpareThreads

protected int minSpareThreads

maxSpareThreads

protected int maxSpareThreads

currentThreadCount

protected int currentThreadCount

currentThreadsBusy

protected int currentThreadsBusy

stopThePool

protected boolean stopThePool

isDaemon

protected boolean isDaemon

threads

protected java.util.Hashtable threads
The threads that are part of the pool. Key is Thread, value is the ControlRunnable


listeners

protected java.util.Vector listeners

name

protected java.lang.String name
Name of the threadpool


sequence

protected int sequence
Sequence.


threadPriority

protected int threadPriority
Thread priority.

Constructor Detail

ThreadPool

public ThreadPool()
Constructor.

Method Detail

createThreadPool

public static ThreadPool createThreadPool(boolean jmx)
Create a ThreadPool instance.

Parameters:
jmx - UNUSED
Returns:
ThreadPool instance. If JMX support is requested, you need to call register() in order to set a name.

start

public void start()

getMonitor

public ThreadPool.MonitorRunnable getMonitor()

setThreadPriority

public void setThreadPriority(int threadPriority)
Sets the thread priority for current and future threads in this pool.

Parameters:
threadPriority - The new priority
Throws:
java.lang.IllegalArgumentException - If the specified priority is less than Thread.MIN_PRIORITY or more than Thread.MAX_PRIORITY

getThreadPriority

public int getThreadPriority()
Returns the priority level of current and future threads in this pool.

Returns:
The priority

setMaxThreads

public void setMaxThreads(int maxThreads)

getMaxThreads

public int getMaxThreads()

setMinSpareThreads

public void setMinSpareThreads(int minSpareThreads)

getMinSpareThreads

public int getMinSpareThreads()

setMaxSpareThreads

public void setMaxSpareThreads(int maxSpareThreads)

getMaxSpareThreads

public int getMaxSpareThreads()

getCurrentThreadCount

public int getCurrentThreadCount()

getCurrentThreadsBusy

public int getCurrentThreadsBusy()

isDaemon

public boolean isDaemon()

getDebug

public static int getDebug()

setDaemon

public void setDaemon(boolean b)
The default is true - the created threads will be in daemon mode. If set to false, the control thread will not be daemon - and will keep the process alive.


getDaemon

public boolean getDaemon()

setName

public void setName(java.lang.String name)

getName

public java.lang.String getName()

getSequence

public int getSequence()

addThread

public void addThread(java.lang.Thread t,
                      ThreadPool.ControlRunnable cr)

removeThread

public void removeThread(java.lang.Thread t)

addThreadPoolListener

public void addThreadPoolListener(ThreadPool.ThreadPoolListener tpl)

getThreads

public java.util.Enumeration getThreads()

run

public void run(java.lang.Runnable r)

runIt

public void runIt(ThreadPoolRunnable r)
Executes a given Runnable on a thread in the pool, block if needed.


shutdown

public void shutdown()
Stop the thread pool


checkSpareControllers

protected void checkSpareControllers()
Called by the monitor thread to harvest idle threads.


returnController

protected void returnController(ThreadPool.ControlRunnable c)
Returns the thread to the pool. Called by threads as they are becoming idel.


notifyThreadEnd

protected void notifyThreadEnd(ThreadPool.ControlRunnable c)
Inform the pool that the specific thread finish. Called by the ControlRunnable.run() when the runnable throws an exception.


adjustLimits

protected void adjustLimits()

openThreads

protected void openThreads(int toOpen)
Create missing threads.

Parameters:
toOpen - Total number of threads we'll have open

threadStatusString

public java.lang.String threadStatusString()
Debug display of the stage of each thread. The return is html style, for display in the console ( it can be easily parsed too )

Returns:

getThreadStatus

public java.lang.String[] getThreadStatus()
Return an array with the status of each thread. The status indicates the current request processing stage ( for tomcat ) or whatever the thread is doing ( if the application using TP provide this info )

Returns:

getThreadParam

public java.lang.String[] getThreadParam()
Return an array with the current "param" ( XXX better name ? ) of each thread. This is typically the last request.

Returns:


Copyright © 2000-2003 Apache Software Foundation. All Rights Reserved.