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 is- started.
Given the definitions above, the most interesting definitions are:
- threads=- readyThreads+- leasedThreads+- utilizedThreads
- readyThreads = idleThreads+availableReservedThreads
- maxAvailableThreads=- maxThreads- leasedThreads
- utilizationRate= 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 + leasedThreads
- idleThreads= readyThreads - availableReservedThreads
- 
Nested Class SummaryNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycleAbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.ContainerContainer.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.DumpableDumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycleLifeCycle.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.ThreadPoolThreadPool.SizedThreadPoolNested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.TryExecutorTryExecutor.NoTryExecutor
- 
Field SummaryFields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycleFAILED, STARTED, STARTING, STOPPED, STOPPINGFields inherited from interface org.eclipse.jetty.util.thread.TryExecutorNO_TRY
- 
Constructor SummaryConstructorsConstructorDescriptionQueuedThreadPool(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 SummaryModifier and TypeMethodDescriptionprotected voiddoStart()Starts the managed lifecycle beans in the order they were added.protected voiddoStop()Stops the managed lifecycle beans in the reverse order they were added.voiddump(Appendable out, String indent) Dump this object (and children) into an Appendable using the provided indent after any new lines.dumpThread(long id) protected booleanevict()Determines whether to evict the current thread from the pool.voidintintThe number of threads executing internal and transient jobs.intThe number of idle threads, but without including reserved threads.intintThe fundamental value that represents the number of threads that are leased to internal components, and therefore cannot be used to execute transient jobs.intintThe maximum number of threads available to run transient jobs.intintThe maximum number of threads that are leased to internal components, as some component may allocate its threads lazily.intintintgetName()protected BlockingQueue<Runnable>getQueue()intintThe fundamental value that represents the number of threads ready to execute transient jobs.intlongintThe fundamental value that represents the number of threads currently known by this thread pool.intdoubleThe rate between the number ofutilized threadsand the maximum number ofutilizable threads.intThe number of threads executing transient jobs.booleaninterruptThread(long id) booleanisDaemon()booleanbooleanReturns whether this thread pool is low on threads.voidjoin()Blocks until the thread pool isLifeCyclestopped.protected voidremoveThread(Thread thread) protected voidRuns the given job in thecurrent thread.voidsetDaemon(boolean daemon) voidsetDetailedDump(boolean detailedDump) voidsetIdleTimeout(int idleTimeout) Set the maximum thread idle time in ms.voidsetLowThreadsThreshold(int lowThreadsThreshold) voidsetMaxEvictCount(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.voidsetMaxThreads(int maxThreads) voidsetMinThreads(int minThreads) voidSets the name of this thread pool, used as a prefix for the thread names.voidsetReservedThreads(int reservedThreads) voidsetStopTimeout(long stopTimeout) voidsetThreadPoolBudget(ThreadPoolBudget budget) voidsetThreadsPriority(int priority) voidsetVirtualThreadsExecutor(Executor executor) protected voidtoString()booleantryExecute(Runnable task) Attempt to execute a task.Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycleaddBean, 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, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCyclegetEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stopMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.util.component.ContainergetCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainerisDumpableMethods inherited from interface org.eclipse.jetty.util.VirtualThreads.ConfigurableisUseVirtualThreads, setUseVirtualThreads
- 
Constructor Details- 
QueuedThreadPoolpublic QueuedThreadPool()
- 
QueuedThreadPool
- 
QueuedThreadPool
- 
QueuedThreadPoolpublic QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("queue") BlockingQueue<Runnable> queue) 
- 
QueuedThreadPool
- 
QueuedThreadPool
- 
QueuedThreadPoolpublic QueuedThreadPool(@Name("maxThreads") int maxThreads, @Name("minThreads") int minThreads, @Name("idleTimeout") int idleTimeout, @Name("queue") BlockingQueue<Runnable> queue, @Name("threadGroup") ThreadGroup threadGroup) 
- 
QueuedThreadPoolpublic 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) 
- 
QueuedThreadPoolpublic 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:
- getThreadPoolBudgetin interface- ThreadPool.SizedThreadPool
- Returns:
- a ThreadPoolBudget for this sized thread pool, or null of no ThreadPoolBudget can be returned
 
- 
setThreadPoolBudget
- 
setStopTimeoutpublic void setStopTimeout(long stopTimeout) 
- 
getStopTimeoutpublic long getStopTimeout()
- 
doStartDescription copied from class:ContainerLifeCycleStarts the managed lifecycle beans in the order they were added.- Overrides:
- doStartin class- ContainerLifeCycle
- 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
 
- 
doStopDescription copied from class:ContainerLifeCycleStops the managed lifecycle beans in the reverse order they were added.- Overrides:
- doStopin class- ContainerLifeCycle
- Throws:
- Exception- If there was a problem stopping. Will cause a transition to FAILED state
 
- 
getIdleTimeout- Returns:
- the maximum thread idle time in ms
 
- 
setIdleTimeoutpublic 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:
- getMaxThreadsin interface- ThreadPool.SizedThreadPool
- Returns:
- the maximum number of threads
 
- 
setMaxThreadspublic void setMaxThreads(int maxThreads) - Specified by:
- setMaxThreadsin interface- ThreadPool.SizedThreadPool
- Parameters:
- maxThreads- the maximum number of threads
 
- 
getMinThreads- Specified by:
- getMinThreadsin interface- ThreadPool.SizedThreadPool
- Returns:
- the minimum number of threads
 
- 
setMinThreadspublic void setMinThreads(int minThreads) - Specified by:
- setMinThreadsin interface- ThreadPool.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
 
- 
setReservedThreadspublic void setReservedThreads(int reservedThreads) - Parameters:
- reservedThreads- number of reserved threads or -1 for heuristically determined
 
- 
getName- Returns:
- the name of the this thread pool
 
- 
setNameSets 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
 
- 
setThreadsPrioritypublic void setThreadsPriority(int priority) - Parameters:
- priority- the priority of the pool threads
 
- 
isDaemon- Returns:
- whether to use daemon threads
- See Also:
 
- 
setDaemonpublic void setDaemon(boolean daemon) - Parameters:
- daemon- whether to use daemon threads
- See Also:
 
- 
isDetailedDump
- 
setDetailedDumppublic void setDetailedDump(boolean detailedDump) 
- 
getLowThreadsThreshold@ManagedAttribute("threshold at which the pool is low on threads") public int getLowThreadsThreshold()
- 
setLowThreadsThresholdpublic void setLowThreadsThreshold(int lowThreadsThreshold) 
- 
getVirtualThreadsExecutor- Specified by:
- getVirtualThreadsExecutorin interface- VirtualThreads.Configurable
- Returns:
- the Executorto use to execute tasks in virtual threads
 
- 
setVirtualThreadsExecutor- Specified by:
- setVirtualThreadsExecutorin interface- VirtualThreads.Configurable
- Parameters:
- executor- the- Executorto use to execute tasks in virtual threads
- See Also:
 
- 
setMaxEvictCountpublic 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=5000andmaxEvictCount=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=2will 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:
 
- 
getThreadsThe 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:
- getThreadsin interface- ThreadPool
- Returns:
- the number of threads currently known to the pool
- See Also:
 
- 
getReadyThreadsThe 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:
 
- 
getLeasedThreadsThe 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:
 
- 
getIdleThreadsThe number of idle threads, but without including reserved threads. Prefer getReadyThreads()for a better representation of "threads ready to execute transient jobs".- Specified by:
- getIdleThreadsin interface- ThreadPool
- 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:
 
- 
getUtilizedThreadsThe 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 threadsand the maximum number ofutilizable threads.A value of 0.0Dmeans that the thread pool is not utilized, while a value of1.0Dmeans 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:
- isLowOnThreadsin interface- ThreadPool
- Returns:
- whether the pool is low on threads
- See Also:
 
- 
execute- Specified by:
- executein interface- Executor
- Specified by:
- executein interface- TryExecutor
 
- 
tryExecuteDescription copied from interface:TryExecutorAttempt to execute a task.- Specified by:
- tryExecutein interface- TryExecutor
- 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.
 
- 
joinBlocks until the thread pool isLifeCyclestopped.- Specified by:
- joinin interface- ThreadPool
- Throws:
- InterruptedException- if thread was interrupted
 
- 
startThreadprotected void startThread()
- 
newThread- Specified by:
- newThreadin interface- ThreadFactory
 
- 
removeThread
- 
dumpDescription copied from interface:DumpableDump 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:
- dumpin interface- Dumpable
- Overrides:
- dumpin class- ContainerLifeCycle
- Parameters:
- out- The appendable to dump to
- indent- The indent to apply after any new lines.
- Throws:
- IOException- if unable to write to Appendable
 
- 
runJobRuns 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
 
- 
evictprotected 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:
- toStringin class- AbstractLifeCycle
 
 
-