com.vividsolutions.jump.workbench.ui.renderer
Class ThreadQueue

java.lang.Object
  extended by com.vividsolutions.jump.workbench.ui.renderer.ThreadQueue

public class ThreadQueue
extends java.lang.Object

This thread queue executes at maximum N Runnables in parallel were N is a given number of worker threads that should be used. If N threads are running and busy each further incoming Runnable is queued until one of the threads has finished its current job. If a worker thread becomes idle (no more job in the queue) it is hold alive for 5 seconds. If during this period of time no new Runnable is enqueued the worker thread dies.

Author:
Sascha L. Teichmann (sascha.teichmann@intevation.de)

Nested Class Summary
static interface ThreadQueue.Listener
          If the number of running threads goes down to zero implementations of this interface are able to be informed.
protected  class ThreadQueue.Worker
          Worker thread.
 
Field Summary
protected  boolean disposed
          Singals that the ThreadQueue is going to quit
protected  java.util.ArrayList listeners
          List of Listeners
protected  int maxRunningThreads
          max.
protected  java.util.LinkedList queuedRunnables
          The queue of Runnables jobs waiting to be run
protected  int[] runningThreads
          Number of running threads
protected  int waitingThreads
          Number of threads that are currently idle
static long WORKER_STAY_ALIVE_TIME
          The time a worker thread stays alive if idle
 
Constructor Summary
ThreadQueue()
          Creates a ThreadQueue with one worker thread.
ThreadQueue(int maxRunningThreads)
          Creates a ThreadQueue with a given number of worker threads.
 
Method Summary
 void add(java.lang.Runnable runnable)
          Adds a Runnables to the queue.
 void add(ThreadQueue.Listener listener)
          Adds a Listener to this ThreadQueue.
 void clear()
          Empties the queue of waiting Runnables.
 void dispose()
          Shuts down the ThreadQueue.
protected  void fireAllRunningThreadsFinished()
          Informs Listeners of the fact that the number of running threads went to zero.
 int getRunningThreads()
          The number of currently running worker threads.
 void remove(ThreadQueue.Listener listener)
          Removes a Listener from this ThreadQueue.
 int runningThreads()
          The number of currently running worker threads.
 int waitingRunnables()
          The number of currently waiting Runnables.
 int waitingThreads()
          The number of currently idle worker threads.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WORKER_STAY_ALIVE_TIME

public static final long WORKER_STAY_ALIVE_TIME
The time a worker thread stays alive if idle

See Also:
Constant Field Values

runningThreads

protected int[] runningThreads
Number of running threads


maxRunningThreads

protected int maxRunningThreads
max. Number of threads running parallel


waitingThreads

protected int waitingThreads
Number of threads that are currently idle


queuedRunnables

protected java.util.LinkedList queuedRunnables
The queue of Runnables jobs waiting to be run


disposed

protected boolean disposed
Singals that the ThreadQueue is going to quit


listeners

protected java.util.ArrayList listeners
List of Listeners

Constructor Detail

ThreadQueue

public ThreadQueue()
Creates a ThreadQueue with one worker thread.


ThreadQueue

public ThreadQueue(int maxRunningThreads)
Creates a ThreadQueue with a given number of worker threads.

Parameters:
maxRunningThreads - the max. number of threads to be run parallel.
Method Detail

add

public void add(ThreadQueue.Listener listener)
Adds a Listener to this ThreadQueue.

Parameters:
listener - the listener to add.

remove

public void remove(ThreadQueue.Listener listener)
Removes a Listener from this ThreadQueue.

Parameters:
listener - the listener to be removed.

fireAllRunningThreadsFinished

protected void fireAllRunningThreadsFinished()
Informs Listeners of the fact that the number of running threads went to zero.


runningThreads

public int runningThreads()
The number of currently running worker threads.

Returns:
number of currently running worker threads.

getRunningThreads

public int getRunningThreads()
The number of currently running worker threads. Alias for runningThreads()

Returns:
number of currently running worker threads.

waitingRunnables

public int waitingRunnables()
The number of currently waiting Runnables.

Returns:
number of currently waiting Runnables.

waitingThreads

public int waitingThreads()
The number of currently idle worker threads.

Returns:
number of currently idle worker threads.

add

public void add(java.lang.Runnable runnable)
Adds a Runnables to the queue. It will be run in one of the worker threads.

Parameters:
runnable - The Runnables to add

clear

public void clear()
Empties the queue of waiting Runnables.


dispose

public void dispose()
Shuts down the ThreadQueue.