Package org.eclipse.jetty.util.thread
Class VirtualThreadPool
java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.util.thread.VirtualThreadPool
- All Implemented Interfaces:
Executor
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
,ThreadPool
,TryExecutor
,VirtualThreads.Configurable
@ManagedObject("A thread non-pool for virtual threads")
public class VirtualThreadPool
extends ContainerLifeCycle
implements ThreadPool, Dumpable, TryExecutor, VirtualThreads.Configurable
An implementation of ThreadPool
interface that does not pool, but instead uses VirtualThreads
.
It is possible to specify the max number of concurrent virtual threads that can be spawned, to help limiting resource usage in applications, especially in case of load spikes, where an unlimited number of virtual threads may be spawned, compete for resources, and eventually bring the system down due to memory exhaustion.
-
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
-
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
int
int
getName()
int
boolean
boolean
boolean
Get if this pool is tracking virtual threads.void
join()
Blocks until the thread pool isstopped
.void
setDetailedDump
(boolean detailedDump) void
setMaxThreads
(int maxThreads) void
Sets the name of this thread pool, used as a prefix for the thread names.void
setTracking
(boolean tracking) void
setVirtualThreadsExecutor
(Executor executor) 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, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, installBean, installBean, 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, toString
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
-
VirtualThreadPool
public VirtualThreadPool() -
VirtualThreadPool
public VirtualThreadPool(int maxThreads)
-
-
Method Details
-
getName
- Returns:
- the name of this thread pool
-
setName
Sets the name of this thread pool, used as a prefix for the thread names.
- Parameters:
name
- the name of this thread pool
-
getMaxThreads
- Returns:
- the maximum number of concurrent virtual threads
-
setMaxThreads
public void setMaxThreads(int maxThreads) - Parameters:
maxThreads
- the maximum number of concurrent virtual threads
-
isTracking
Get if this pool is tracking virtual threads.- Returns:
true
if the virtual threads will be tracked.- See Also:
-
setTracking
public void setTracking(boolean tracking) -
isDetailedDump
@ManagedAttribute("Whether to report additional details in the dump") public boolean isDetailedDump() -
setDetailedDump
public void setDetailedDump(boolean detailedDump) -
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
-
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:
-
join
Description copied from interface:ThreadPool
Blocks until the thread pool isstopped
.- Specified by:
join
in interfaceThreadPool
- Throws:
InterruptedException
- if thread was interrupted
-
getThreads
public int getThreads()- Specified by:
getThreads
in interfaceThreadPool
- Returns:
- The total number of threads currently in the pool
-
getIdleThreads
public int getIdleThreads()- Specified by:
getIdleThreads
in interfaceThreadPool
- Returns:
- The number of idle threads in the pool
-
isLowOnThreads
public boolean isLowOnThreads()- Specified by:
isLowOnThreads
in interfaceThreadPool
- Returns:
- True if the pool is low on threads
-
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.
-
execute
- Specified by:
execute
in interfaceExecutor
- Specified by:
execute
in interfaceTryExecutor
-