Class QueuedThreadPool
- All Implemented Interfaces:
Executor
,ThreadFactory
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
,ThreadPool
,ThreadPool.SizedThreadPool
,TryExecutor
,VirtualThreads.Configurable
- Direct Known Subclasses:
MonitoredQueuedThreadPool
A thread pool with a queue of jobs to execute.
Jetty components that need threads (such as network acceptors and selector) may lease threads
from this thread pool using a ThreadPoolBudget
; these threads are "active" from the point
of view of the thread pool, but not available to run transient jobs such as processing
an HTTP request or a WebSocket frame.
QueuedThreadPool has a ReservedThreadExecutor
which leases threads from this pool,
but makes them available as if they are "idle" threads.
QueuedThreadPool therefore has the following fundamental values:
threads
: the current number of threads. These threads may execute a job (either internal or transient), or may be ready to run (either idle or reserved). This number may grow or shrink as the thread pool grows or shrinks.readyThreads
: the current number of threads that are ready to run transient jobs. This number may grow or shrink as the thread pool grows or shrinks.leasedThreads
: the number of threads that run internal jobs. This number is typically constant after this thread pool isstarted
.
Given the definitions above, the most interesting definitions are:
threads
=readyThreads
+leasedThreads
+utilizedThreads
- readyThreads =
idleThreads
+availableReservedThreads
maxAvailableThreads
=maxThreads
- leasedThreadsutilizationRate
= utilizedThreads / maxAvailableThreads
Other definitions, typically less interesting because they take into account threads that execute internal jobs, or because they don't take into account available reserved threads (that are essentially ready to execute transient jobs), are:
busyThreads
= utilizedThreads + leasedThreadsidleThreads
= readyThreads - availableReservedThreads
-
Nested Class Summary
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopException
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.ThreadPool
ThreadPool.SizedThreadPool
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.TryExecutor
TryExecutor.NoTryExecutor
-
Field Summary
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPING
Fields inherited from interface org.eclipse.jetty.util.thread.TryExecutor
NO_TRY
-
Constructor Summary
ConstructorDescriptionQueuedThreadPool
(int maxThreads) QueuedThreadPool
(int maxThreads, int minThreads) QueuedThreadPool
(int maxThreads, int minThreads, int idleTimeout) QueuedThreadPool
(int maxThreads, int minThreads, int idleTimeout, int reservedThreads, BlockingQueue<Runnable> queue, ThreadGroup threadGroup) QueuedThreadPool
(int maxThreads, int minThreads, int idleTimeout, int reservedThreads, BlockingQueue<Runnable> queue, ThreadGroup threadGroup, ThreadFactory threadFactory) QueuedThreadPool
(int maxThreads, int minThreads, int idleTimeout, BlockingQueue<Runnable> queue) QueuedThreadPool
(int maxThreads, int minThreads, int idleTimeout, BlockingQueue<Runnable> queue, ThreadGroup threadGroup) QueuedThreadPool
(int maxThreads, int minThreads, BlockingQueue<Runnable> queue) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
doStart()
Starts the managed lifecycle beans in the order they were added.protected void
doStop()
Stops the managed lifecycle beans in the reverse order they were added.void
dump
(Appendable out, String indent) Dump this object (and children) into an Appendable using the provided indent after any new lines.dumpThread
(long id) protected boolean
evict()
Determines whether to evict the current thread from the pool.void
int
int
The number of threads executing internal and transient jobs.int
The number of idle threads, but without including reserved threads.int
int
The fundamental value that represents the number of threads that are leased to internal components, and therefore cannot be used to execute transient jobs.int
int
The maximum number of threads available to run transient jobs.int
int
The maximum number of threads that are leased to internal components, as some component may allocate its threads lazily.int
int
int
getName()
protected BlockingQueue<Runnable>
getQueue()
int
int
The fundamental value that represents the number of threads ready to execute transient jobs.int
long
int
The fundamental value that represents the number of threads currently known by this thread pool.int
double
The rate between the number ofutilized threads
and the maximum number ofutilizable threads
.int
The number of threads executing transient jobs.boolean
interruptThread
(long id) boolean
isDaemon()
boolean
boolean
Returns whether this thread pool is low on threads.void
join()
Blocks until the thread pool isLifeCycle
stopped.protected void
removeThread
(Thread thread) protected void
Runs the given job in thecurrent thread
.void
setDaemon
(boolean daemon) void
setDetailedDump
(boolean detailedDump) void
setIdleTimeout
(int idleTimeout) Set the maximum thread idle time in ms.void
setLowThreadsThreshold
(int lowThreadsThreshold) void
setMaxEvictCount
(int evictCount) Returns the maximum number of idle threads that are evicted for every idle timeout period, thus shrinking this thread pool towards itsminimum number of threads
.void
setMaxThreads
(int maxThreads) void
setMinThreads
(int minThreads) void
Sets the name of this thread pool, used as a prefix for the thread names.void
setReservedThreads
(int reservedThreads) void
setStopTimeout
(long stopTimeout) void
setThreadPoolBudget
(ThreadPoolBudget budget) void
setThreadsPriority
(int priority) void
setVirtualThreadsExecutor
(Executor executor) protected void
toString()
boolean
tryExecute
(Runnable task) Attempt to execute a task.Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListeners
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
Methods inherited from interface org.eclipse.jetty.util.VirtualThreads.Configurable
isUseVirtualThreads, setUseVirtualThreads
-
Constructor Details
-
QueuedThreadPool
public QueuedThreadPool() -
QueuedThreadPool
-
QueuedThreadPool
-
QueuedThreadPool
public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("queue") BlockingQueue<Runnable> queue) -
QueuedThreadPool
-
QueuedThreadPool
-
QueuedThreadPool
public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout") int idleTimeout, @Name("queue") BlockingQueue<Runnable> queue, @Name("threadGroup") ThreadGroup threadGroup) -
QueuedThreadPool
public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout") int idleTimeout, @Name("reservedThreads") int reservedThreads, @Name("queue") BlockingQueue<Runnable> queue, @Name("threadGroup") ThreadGroup threadGroup) -
QueuedThreadPool
public QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout") int idleTimeout, @Name("reservedThreads") int reservedThreads, @Name("queue") BlockingQueue<Runnable> queue, @Name("threadGroup") ThreadGroup threadGroup, @Name("threadFactory") ThreadFactory threadFactory)
-
-
Method Details
-
getThreadPoolBudget
- Specified by:
getThreadPoolBudget
in interfaceThreadPool.SizedThreadPool
- Returns:
- a ThreadPoolBudget for this sized thread pool, or null of no ThreadPoolBudget can be returned
-
setThreadPoolBudget
-
setStopTimeout
public void setStopTimeout(long stopTimeout) -
getStopTimeout
public long getStopTimeout() -
doStart
Description copied from class:ContainerLifeCycle
Starts the managed lifecycle beans in the order they were added.- Overrides:
doStart
in classContainerLifeCycle
- Throws:
AbstractLifeCycle.StopException
- If thrown, the lifecycle will immediately be stopped.Exception
- If there was a problem starting. Will cause a transition to FAILED state
-
doStop
Description copied from class:ContainerLifeCycle
Stops the managed lifecycle beans in the reverse order they were added.- Overrides:
doStop
in classContainerLifeCycle
- Throws:
Exception
- If there was a problem stopping. Will cause a transition to FAILED state
-
getIdleTimeout
- Returns:
- the maximum thread idle time in ms
-
setIdleTimeout
public void setIdleTimeout(int idleTimeout) Set the maximum thread idle time in ms.
Threads that are idle for longer than this period may be stopped.
- Parameters:
idleTimeout
- the maximum thread idle time in ms
-
getMaxThreads
- Specified by:
getMaxThreads
in interfaceThreadPool.SizedThreadPool
- Returns:
- the maximum number of threads
-
setMaxThreads
public void setMaxThreads(int maxThreads) - Specified by:
setMaxThreads
in interfaceThreadPool.SizedThreadPool
- Parameters:
maxThreads
- the maximum number of threads
-
getMinThreads
- Specified by:
getMinThreads
in interfaceThreadPool.SizedThreadPool
- Returns:
- the minimum number of threads
-
setMinThreads
public void setMinThreads(int minThreads) - Specified by:
setMinThreads
in interfaceThreadPool.SizedThreadPool
- Parameters:
minThreads
- minimum number of threads
-
getReservedThreads
@ManagedAttribute("number of configured reserved threads or -1 for heuristic") public int getReservedThreads()- Returns:
- number of reserved threads or -1 for heuristically determined
-
setReservedThreads
public void setReservedThreads(int reservedThreads) - Parameters:
reservedThreads
- number of reserved threads or -1 for heuristically determined
-
getName
- Returns:
- the name of the this thread pool
-
setName
Sets the name of this thread pool, used as a prefix for the thread names.
- Parameters:
name
- the name of the this thread pool
-
getThreadsPriority
- Returns:
- the priority of the pool threads
-
setThreadsPriority
public void setThreadsPriority(int priority) - Parameters:
priority
- the priority of the pool threads
-
isDaemon
- Returns:
- whether to use daemon threads
- See Also:
-
setDaemon
public void setDaemon(boolean daemon) - Parameters:
daemon
- whether to use daemon threads- See Also:
-
isDetailedDump
-
setDetailedDump
public void setDetailedDump(boolean detailedDump) -
getLowThreadsThreshold
@ManagedAttribute("threshold at which the pool is low on threads") public int getLowThreadsThreshold() -
setLowThreadsThreshold
public void setLowThreadsThreshold(int lowThreadsThreshold) -
getVirtualThreadsExecutor
- Specified by:
getVirtualThreadsExecutor
in interfaceVirtualThreads.Configurable
- Returns:
- the
Executor
to use to execute tasks in virtual threads
-
setVirtualThreadsExecutor
- Specified by:
setVirtualThreadsExecutor
in interfaceVirtualThreads.Configurable
- Parameters:
executor
- theExecutor
to use to execute tasks in virtual threads- See Also:
-
setMaxEvictCount
public void setMaxEvictCount(int evictCount) Returns the maximum number of idle threads that are evicted for every idle timeout period, thus shrinking this thread pool towards its
minimum number of threads
. The default value is1
.For example, consider a thread pool with
minThread=2
,maxThread=20
,idleTimeout=5000
andmaxEvictCount=3
. Let's assume all 20 threads are executing a task, and they all finish their own tasks at the same time and no more tasks are submitted; then, 3 threads will be evicted, while the other 17 will wait another idle timeout; then another 3 threads will be evicted, and so on untilminThreads=2
will be reached.- Parameters:
evictCount
- the maximum number of idle threads to evict in one idle timeout period
-
getMaxEvictCount
@ManagedAttribute("maximum number of idle threads to evict in one idle timeout period") public int getMaxEvictCount()- Returns:
- the maximum number of idle threads to evict in one idle timeout period
-
getQueueSize
- Returns:
- the number of jobs in the queue waiting for a thread
-
getMaxReservedThreads
@ManagedAttribute("maximum number (capacity) of reserved threads") public int getMaxReservedThreads()- Returns:
- the maximum number (capacity) of reserved threads
- See Also:
-
getAvailableReservedThreads
- Returns:
- the number of available reserved threads
- See Also:
-
getThreads
The fundamental value that represents the number of threads currently known by this thread pool.
This value includes threads that have been leased to internal components, idle threads, reserved threads and threads that are executing transient jobs.
- Specified by:
getThreads
in interfaceThreadPool
- Returns:
- the number of threads currently known to the pool
- See Also:
-
getReadyThreads
The fundamental value that represents the number of threads ready to execute transient jobs.
- Returns:
- the number of threads ready to execute transient jobs
- See Also:
-
getLeasedThreads
The fundamental value that represents the number of threads that are leased to internal components, and therefore cannot be used to execute transient jobs.
- Returns:
- the number of threads currently used by internal components
- See Also:
-
getMaxLeasedThreads
@ManagedAttribute("maximum number of threads leased to internal components") public int getMaxLeasedThreads()The maximum number of threads that are leased to internal components, as some component may allocate its threads lazily.
- Returns:
- the maximum number of threads leased by internal components
- See Also:
-
getIdleThreads
The number of idle threads, but without including reserved threads.
Prefer
getReadyThreads()
for a better representation of "threads ready to execute transient jobs".- Specified by:
getIdleThreads
in interfaceThreadPool
- Returns:
- the number of idle threads but not reserved
- See Also:
-
getBusyThreads
@ManagedAttribute("number of threads executing internal and transient jobs") public int getBusyThreads()The number of threads executing internal and transient jobs.
Prefer
getUtilizedThreads()
for a better representation of "threads executing transient jobs".- Returns:
- the number of threads executing internal and transient jobs
- See Also:
-
getUtilizedThreads
The number of threads executing transient jobs.
- Returns:
- the number of threads executing transient jobs
- See Also:
-
getMaxAvailableThreads
@ManagedAttribute("maximum number of threads available to run transient jobs") public int getMaxAvailableThreads()The maximum number of threads available to run transient jobs.
- Returns:
- the maximum number of threads available to run transient jobs
-
getUtilizationRate
@ManagedAttribute("utilization rate of threads executing transient jobs") public double getUtilizationRate()The rate between the number of
utilized threads
and the maximum number ofutilizable threads
.A value of
0.0D
means that the thread pool is not utilized, while a value of1.0D
means that the thread pool is fully utilized to execute transient jobs.- Returns:
- the utilization rate of threads executing transient jobs
-
isLowOnThreads
@ManagedAttribute(value="thread pool is low on threads", readonly=true) public boolean isLowOnThreads()Returns whether this thread pool is low on threads.
The current formula is:
maxThreads - threads + readyThreads - queueSize <= lowThreadsThreshold
- Specified by:
isLowOnThreads
in interfaceThreadPool
- Returns:
- whether the pool is low on threads
- See Also:
-
execute
- Specified by:
execute
in interfaceExecutor
- Specified by:
execute
in interfaceTryExecutor
-
tryExecute
Description copied from interface:TryExecutor
Attempt to execute a task.- Specified by:
tryExecute
in interfaceTryExecutor
- Parameters:
task
- The task to be executed- Returns:
- True IFF the task has been given directly to a thread to execute. The task cannot be queued pending the later availability of a Thread.
-
join
Blocks until the thread pool isLifeCycle
stopped.- Specified by:
join
in interfaceThreadPool
- Throws:
InterruptedException
- if thread was interrupted
-
startThread
protected void startThread() -
newThread
- Specified by:
newThread
in interfaceThreadFactory
-
removeThread
-
dump
Description copied from interface:Dumpable
Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.- Specified by:
dump
in interfaceDumpable
- Overrides:
dump
in classContainerLifeCycle
- Parameters:
out
- The appendable to dump toindent
- The indent to apply after any new lines.- Throws:
IOException
- if unable to write to Appendable
-
runJob
Runs the given job in the
current thread
.Subclasses may override to perform pre/post actions before/after the job is run.
- Parameters:
job
- the job to run
-
evict
protected boolean evict()Determines whether to evict the current thread from the pool.
- Returns:
- whether the current thread should be evicted
-
getQueue
- Returns:
- the job queue
-
interruptThread
- Parameters:
id
- the thread ID to interrupt.- Returns:
- true if the thread was found and interrupted.
-
dumpThread
- Parameters:
id
- the thread ID to interrupt.- Returns:
- the stack frames dump
-
toString
- Overrides:
toString
in classAbstractLifeCycle
-