Package org.apache.tomcat.util.threads
Class TaskQueue
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.LinkedBlockingQueue<java.lang.Runnable>
-
- org.apache.tomcat.util.threads.TaskQueue
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Iterable<java.lang.Runnable>,java.util.Collection<java.lang.Runnable>,java.util.concurrent.BlockingQueue<java.lang.Runnable>,java.util.Queue<java.lang.Runnable>,RetryableQueue<java.lang.Runnable>
public class TaskQueue extends java.util.concurrent.LinkedBlockingQueue<java.lang.Runnable> implements RetryableQueue<java.lang.Runnable>
A task queue specifically designed to run with a thread pool executor. The task queue is optimised to properly utilize threads within a thread pool executor. A normal queue causes the executor to queue tasks first and only create new threads once the queue is full. This queue instead refuses to queue a task while all existing threads are busy and the pool size is below its maximum, so the executor creates a new thread for the task instead. It also supports forcing items onto the queue viaforce(Runnable).- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringManagersmThe string manager for this package.
-
Constructor Summary
Constructors Constructor Description TaskQueue()Constructs a new TaskQueue with default capacity.TaskQueue(int capacity)Constructs a new TaskQueue with the given capacity.TaskQueue(java.util.Collection<? extends java.lang.Runnable> c)Constructs a new TaskQueue containing the elements in the given collection.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanforce(java.lang.Runnable o)Used to add a task to the queue if the task has been rejected by the Executor.booleanoffer(java.lang.Runnable o)java.lang.Runnablepoll(long timeout, java.util.concurrent.TimeUnit unit)Removes and returns the head of this queue, waiting up to the specified wait time if necessary for an element to become available.voidsetParent(ThreadPoolExecutor tp)Sets the parent thread pool executor for this queue.java.lang.Runnabletake()-
Methods inherited from class java.util.concurrent.LinkedBlockingQueue
clear, contains, drainTo, drainTo, forEach, iterator, offer, peek, poll, put, remainingCapacity, remove, removeAll, removeIf, retainAll, size, spliterator, toArray, toArray, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.concurrent.BlockingQueue
add, contains, drainTo, drainTo, offer, put, remainingCapacity, remove
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
The string manager for this package.
-
-
Constructor Detail
-
TaskQueue
public TaskQueue()
Constructs a new TaskQueue with default capacity.
-
TaskQueue
public TaskQueue(int capacity)
Constructs a new TaskQueue with the given capacity.- Parameters:
capacity- the queue capacity
-
TaskQueue
public TaskQueue(java.util.Collection<? extends java.lang.Runnable> c)
Constructs a new TaskQueue containing the elements in the given collection.- Parameters:
c- the collection of initial elements
-
-
Method Detail
-
setParent
public void setParent(ThreadPoolExecutor tp)
Sets the parent thread pool executor for this queue.- Parameters:
tp- the parent executor
-
force
public boolean force(java.lang.Runnable o)
Description copied from interface:RetryableQueueUsed to add a task to the queue if the task has been rejected by the Executor.- Specified by:
forcein interfaceRetryableQueue<java.lang.Runnable>- Parameters:
o- The task to add to the queue- Returns:
trueif the task was added to the queue, otherwisefalse
-
offer
public boolean offer(java.lang.Runnable o)
- Specified by:
offerin interfacejava.util.concurrent.BlockingQueue<java.lang.Runnable>- Specified by:
offerin interfacejava.util.Queue<java.lang.Runnable>- Overrides:
offerin classjava.util.concurrent.LinkedBlockingQueue<java.lang.Runnable>
-
poll
public java.lang.Runnable poll(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedExceptionRemoves and returns the head of this queue, waiting up to the specified wait time if necessary for an element to become available.- Specified by:
pollin interfacejava.util.concurrent.BlockingQueue<java.lang.Runnable>- Overrides:
pollin classjava.util.concurrent.LinkedBlockingQueue<java.lang.Runnable>- Parameters:
timeout- the maximum time to waitunit- the time unit of the timeout argument- Returns:
- the head of this queue, or
nullif the specified waiting time elapses before an element becomes available - Throws:
java.lang.InterruptedException- if interrupted while waitingStopPooledThreadException- if the current thread is due to be stopped by the parent executor
-
take
public java.lang.Runnable take() throws java.lang.InterruptedException- Specified by:
takein interfacejava.util.concurrent.BlockingQueue<java.lang.Runnable>- Overrides:
takein classjava.util.concurrent.LinkedBlockingQueue<java.lang.Runnable>- Throws:
java.lang.InterruptedException
-
-