# Class StandardThreadExecutor

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.core.StandardThreadExecutor

All Implemented Interfaces:
  `AutoCloseable, Executor, ExecutorService, MBeanRegistration, Executor, JmxEnabled, Lifecycle, ResizableExecutor`

public class StandardThreadExecutor extends LifecycleMBeanBase implements Executor, ResizableExecutor
Standard implementation of an `Executor` based on a Java thread pool.

## Nested Class Summary

### Nested classes/interfaces inherited from interface Lifecycle

`Lifecycle.SingleUse`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected boolean`
`daemon`
Run threads in daemon or non-daemon state
`protected ThreadPoolExecutor`
`executor`
The executor we use for this component
`protected int`
`maxIdleTime`
idle time in milliseconds
`protected int`
`maxQueueSize`
The maximum number of elements that can queue up before we reject them
`protected int`
`maxThreads`
max number of threads
`protected int`
`minSpareThreads`
min number of threads
`protected String`
`name`
the name of this thread pool
`protected String`
`namePrefix`
Default name prefix for the thread name
`protected static final StringManager`
`sm`
StringManager for this package.
`protected int`
`threadPriority`
Default thread priority
`protected long`
`threadRenewalDelay`
After a context is stopped, threads in the pool are renewed.

### Fields inherited from interface Lifecycle

`AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

## Constructor Summary

Constructors
Constructor
Description
`StandardThreadExecutor()`
Default constructor required for the Digester.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`awaitTermination(long timeout, TimeUnit unit)`
`void`
`contextStopping()`
Notify the underlying executor that the associated context is stopping so that it can prepare for shutdown.
`void`
`execute(Runnable command)`
`int`
`getActiveCount()`
Returns the approximate number of threads that are actively executing tasks.
`long`
`getCompletedTaskCount()`
Return the approximate total number of tasks that have completed execution.
`int`
`getCorePoolSize()`
Return the core number of threads for the underlying thread pool.
`protected String`
`getDomainInternal()`
Method implemented by subclasses to identify the domain in which MBeans should be registered.
`int`
`getLargestPoolSize()`
Return the largest number of threads that have ever simultaneously been in the pool.
`int`
`getMaxIdleTime()`
Return the maximum idle time in milliseconds.
`int`
`getMaxQueueSize()`
Return the maximum number of elements that can queue up before tasks are rejected.
`int`
`getMaxThreads()`
Returns the maximum number of threads in the pool.
`int`
`getMinSpareThreads()`
Return the minimum number of spare threads.
`String`
`getName()`
Returns the name of this executor.
`String`
`getNamePrefix()`
Return the name prefix for new threads.
`protected String`
`getObjectNameKeyProperties()`
Allow subclasses to specify the key properties component of the `ObjectName` that will be used to register this component.
`int`
`getPoolSize()`
Returns the current number of threads in the pool.
`int`
`getQueueSize()`
Return the current queue size.
`int`
`getThreadPriority()`
Return the thread priority for new threads.
`long`
`getThreadRenewalDelay()`
Return the thread renewal delay in milliseconds.
`<T> List<Future<T>>`
`invokeAll(Collection<? extends Callable<T>> tasks)`
`<T> List<Future<T>>`
`invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)`
`<T> T`
`invokeAny(Collection<? extends Callable<T>> tasks)`
`<T> T`
`invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)`
`boolean`
`isDaemon()`
Return whether threads are daemon threads.
`boolean`
`isShutdown()`
`boolean`
`isTerminated()`
`boolean`
`resizePool(int corePoolSize, int maximumPoolSize)`
Resize the thread pool.
`boolean`
`resizeQueue(int capacity)`
Resize the work queue.
`void`
`setDaemon(boolean daemon)`
Set whether threads are daemon threads.
`void`
`setMaxIdleTime(int maxIdleTime)`
Set the maximum idle time in milliseconds.
`void`
`setMaxQueueSize(int size)`
Set the maximum queue size.
`void`
`setMaxThreads(int maxThreads)`
Set the maximum number of threads in the pool.
`void`
`setMinSpareThreads(int minSpareThreads)`
Set the minimum number of spare threads.
`void`
`setName(String name)`
Set the name for this executor.
`void`
`setNamePrefix(String namePrefix)`
Set the name prefix for new threads.
`void`
`setThreadPriority(int threadPriority)`
Set the thread priority for new threads.
`void`
`setThreadRenewalDelay(long threadRenewalDelay)`
Set the thread renewal delay in milliseconds.
`void`
`shutdown()`
`List<Runnable>`
`shutdownNow()`
`protected void`
`startInternal()`
Start the component and implement the requirements of `LifecycleBase.startInternal()`.
`protected void`
`stopInternal()`
Stop the component and implement the requirements of `LifecycleBase.stopInternal()`.
`Future<?>`
`submit(Runnable task)`
`<T> Future<T>`
`submit(Runnable task, T result)`
`<T> Future<T>`
`submit(Callable<T> task)`

### Methods inherited from class LifecycleMBeanBase

`destroyInternal, getDomain, getObjectName, initInternal, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister`

### Methods inherited from class LifecycleBase

`addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface ExecutorService

`close`

### Methods inherited from interface Lifecycle

`addLifecycleListener, destroy, findLifecycleListeners, getState, getStateName, init, removeLifecycleListener, start, stop`

## Field Details

### sm

protected static final StringManager sm
StringManager for this package.

### threadPriority

protected int threadPriority
Default thread priority

### daemon

protected boolean daemon
Run threads in daemon or non-daemon state

### namePrefix

protected String namePrefix
Default name prefix for the thread name

### maxThreads

protected int maxThreads
max number of threads

### minSpareThreads

protected int minSpareThreads
min number of threads

### maxIdleTime

protected int maxIdleTime
idle time in milliseconds

### executor

protected ThreadPoolExecutor executor
The executor we use for this component

### name

protected String name
the name of this thread pool

### maxQueueSize

protected int maxQueueSize
The maximum number of elements that can queue up before we reject them

### threadRenewalDelay

protected long threadRenewalDelay
After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time, this delay is observed between 2 threads being renewed.

## Constructor Details

### StandardThreadExecutor

public StandardThreadExecutor()
Default constructor required for the Digester.

## Method Details

### startInternal

protected void startInternal() throws LifecycleException
Start the component and implement the requirements of `LifecycleBase.startInternal()`.

Specified by:
  `startInternal` in class `LifecycleBase`
Throws:
  `LifecycleException` - if this component detects a fatal error that prevents this component from being used

### stopInternal

protected void stopInternal() throws LifecycleException
Stop the component and implement the requirements of `LifecycleBase.stopInternal()`.

Specified by:
  `stopInternal` in class `LifecycleBase`
Throws:
  `LifecycleException` - if this component detects a fatal error that needs to be reported

### execute

public void execute(Runnable command)

Specified by:
  `execute` in interface `Executor`

### contextStopping

public void contextStopping()
Notify the underlying executor that the associated context is stopping so that it can prepare for shutdown.

### getThreadPriority

public int getThreadPriority()
Return the thread priority for new threads.

Returns:
  the thread priority

### isDaemon

public boolean isDaemon()
Return whether threads are daemon threads.

Returns:
  true if threads are daemon threads

### getNamePrefix

public String getNamePrefix()
Return the name prefix for new threads.

Returns:
  the name prefix

### getMaxIdleTime

public int getMaxIdleTime()
Return the maximum idle time in milliseconds.

Returns:
  the maximum idle time in milliseconds

### getMaxThreads

public int getMaxThreads()
Description copied from interface: `ResizableExecutor`
Returns the maximum number of threads in the pool.

Specified by:
  `getMaxThreads` in interface `ResizableExecutor`
Returns:
  the maximum number of threads

### getMinSpareThreads

public int getMinSpareThreads()
Return the minimum number of spare threads.

Returns:
  the minimum spare threads

### getName

public String getName()
Description copied from interface: `Executor`
Returns the name of this executor.

Specified by:
  `getName` in interface `Executor`
Returns:
  the executor name

### setThreadPriority

public void setThreadPriority(int threadPriority)
Set the thread priority for new threads.

Parameters:
  `threadPriority` - the thread priority

### setDaemon

public void setDaemon(boolean daemon)
Set whether threads are daemon threads.

Parameters:
  `daemon` - true for daemon threads

### setNamePrefix

public void setNamePrefix(String namePrefix)
Set the name prefix for new threads.

Parameters:
  `namePrefix` - the name prefix

### setMaxIdleTime

public void setMaxIdleTime(int maxIdleTime)
Set the maximum idle time in milliseconds.

Parameters:
  `maxIdleTime` - the maximum idle time

### setMaxThreads

public void setMaxThreads(int maxThreads)
Set the maximum number of threads in the pool.

Parameters:
  `maxThreads` - the maximum threads

### setMinSpareThreads

public void setMinSpareThreads(int minSpareThreads)
Set the minimum number of spare threads.

Parameters:
  `minSpareThreads` - the minimum spare threads

### setName

public void setName(String name)
Set the name for this executor.

Parameters:
  `name` - the executor name

### setMaxQueueSize

public void setMaxQueueSize(int size)
Set the maximum queue size.

Parameters:
  `size` - the maximum queue size

### getMaxQueueSize

public int getMaxQueueSize()
Return the maximum number of elements that can queue up before tasks are rejected.

Returns:
  the maximum queue size

### getThreadRenewalDelay

public long getThreadRenewalDelay()
Return the thread renewal delay in milliseconds.

Returns:
  the thread renewal delay

### setThreadRenewalDelay

public void setThreadRenewalDelay(long threadRenewalDelay)
Set the thread renewal delay in milliseconds.

Parameters:
  `threadRenewalDelay` - the thread renewal delay

### getActiveCount

public int getActiveCount()
Description copied from interface: `ResizableExecutor`
Returns the approximate number of threads that are actively executing tasks.

Specified by:
  `getActiveCount` in interface `ResizableExecutor`
Returns:
  the number of threads

### getCompletedTaskCount

public long getCompletedTaskCount()
Return the approximate total number of tasks that have completed execution.

Returns:
  the completed task count

### getCorePoolSize

public int getCorePoolSize()
Return the core number of threads for the underlying thread pool.

Returns:
  the core pool size

### getLargestPoolSize

public int getLargestPoolSize()
Return the largest number of threads that have ever simultaneously been in the pool.

Returns:
  the largest pool size

### getPoolSize

public int getPoolSize()
Description copied from interface: `ResizableExecutor`
Returns the current number of threads in the pool.

Specified by:
  `getPoolSize` in interface `ResizableExecutor`
Returns:
  the number of threads

### getQueueSize

public int getQueueSize()
Return the current queue size.

Returns:
  the queue size, or -1 if not available

### resizePool

public boolean resizePool(int corePoolSize, int maximumPoolSize)
Description copied from interface: `ResizableExecutor`
Resize the thread pool.

Specified by:
  `resizePool` in interface `ResizableExecutor`
Parameters:
  `corePoolSize` - The new core pool size
  `maximumPoolSize` - The new maximum pool size
Returns:
  True if the pool was resized successfully

### resizeQueue

public boolean resizeQueue(int capacity)
Description copied from interface: `ResizableExecutor`
Resize the work queue.

Specified by:
  `resizeQueue` in interface `ResizableExecutor`
Parameters:
  `capacity` - The new queue capacity
Returns:
  True if the queue was resized successfully

### getDomainInternal

protected String getDomainInternal()
Description copied from class: `LifecycleMBeanBase`
Method implemented by subclasses to identify the domain in which MBeans should be registered.

Specified by:
  `getDomainInternal` in class `LifecycleMBeanBase`
Returns:
  The name of the domain to use to register MBeans.

### getObjectNameKeyProperties

protected String getObjectNameKeyProperties()
Description copied from class: `LifecycleMBeanBase`
Allow subclasses to specify the key properties component of the `ObjectName` that will be used to register this component.

Specified by:
  `getObjectNameKeyProperties` in class `LifecycleMBeanBase`
Returns:
  The string representation of the key properties component of the desired `ObjectName`

### shutdown

public void shutdown()

Specified by:
  `shutdown` in interface `ExecutorService`

### shutdownNow

public List<Runnable> shutdownNow()

Specified by:
  `shutdownNow` in interface `ExecutorService`

### isShutdown

public boolean isShutdown()

Specified by:
  `isShutdown` in interface `ExecutorService`

### isTerminated

public boolean isTerminated()

Specified by:
  `isTerminated` in interface `ExecutorService`

### awaitTermination

public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException

Specified by:
  `awaitTermination` in interface `ExecutorService`
Throws:
  `InterruptedException`

### submit

public <T> Future<T> submit(Callable<T> task)

Specified by:
  `submit` in interface `ExecutorService`

### submit

public <T> Future<T> submit(Runnable task, T result)

Specified by:
  `submit` in interface `ExecutorService`

### submit

public Future<?> submit(Runnable task)

Specified by:
  `submit` in interface `ExecutorService`

### invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException

Specified by:
  `invokeAll` in interface `ExecutorService`
Throws:
  `InterruptedException`

### invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException

Specified by:
  `invokeAll` in interface `ExecutorService`
Throws:
  `InterruptedException`

### invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException

Specified by:
  `invokeAny` in interface `ExecutorService`
Throws:
  `InterruptedException`
  `ExecutionException`

### invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException

Specified by:
  `invokeAny` in interface `ExecutorService`
Throws:
  `InterruptedException`
  `ExecutionException`
  `TimeoutException`