public class

ThreadPoolTaskExecutor

extends CustomizableThreadFactory
implements BeanNameAware DisposableBean InitializingBean SchedulingTaskExecutor
java.lang.Object
   ↳ org.springframework.util.CustomizableThreadCreator
     ↳ org.springframework.scheduling.backportconcurrent.CustomizableThreadFactory
       ↳ org.springframework.scheduling.backportconcurrent.ThreadPoolTaskExecutor

Class Overview

JavaBean that allows for configuring a JSR-166 backport edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor in bean style (through its "corePoolSize", "maxPoolSize", "keepAliveSeconds", "queueCapacity" properties), exposing it as a Spring TaskExecutor. This is an alternative to configuring a ThreadPoolExecutor instance directly using constructor injection, with a separate ConcurrentTaskExecutor adapter wrapping it.

For any custom needs, in particular for defining a edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor, it is recommended to use a straight definition of the Executor instance or a factory method definition that points to the JSR-166 backport edu.emory.mathcs.backport.java.util.concurrent.Executors class. To expose such a raw Executor as a Spring TaskExecutor, simply wrap it with a ConcurrentTaskExecutor adapter.

NOTE: This class implements Spring's TaskExecutor interface (and hence implicitly the standard Java 5 Executor interface) as well as the JSR-166 edu.emory.mathcs.backport.java.util.concurrent.Executor interface, with the former being the primary interface, the other just serving as secondary convenience. For this reason, the exception handling follows the TaskExecutor contract rather than the backport Executor contract, in particular regarding the TaskRejectedException.

See Also
  • TaskExecutor
  • edu.emory.mathcs.backport.java.util.concurrent.Executor
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor
  • edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor
  • edu.emory.mathcs.backport.java.util.concurrent.Executors
  • ConcurrentTaskExecutor

Summary

[Expand]
Inherited Constants
From interface org.springframework.core.task.AsyncTaskExecutor
Fields
protected final Log logger
Public Constructors
ThreadPoolTaskExecutor()
Public Methods
void afterPropertiesSet()
Calls initialize() after the container applied all property values.
void destroy()
Calls shutdown when the BeanFactory destroys the task executor instance.
void execute(Runnable task, long startTimeout)
Execute the given task.
void execute(Runnable task)
Implementation of both the JSR-166 backport Executor interface and the Spring TaskExecutor interface, delegating to the ThreadPoolExecutor instance.
int getActiveCount()
Return the number of currently active threads.
int getCorePoolSize()
Return the ThreadPoolExecutor's core pool size.
int getKeepAliveSeconds()
Return the ThreadPoolExecutor's keep-alive seconds.
int getMaxPoolSize()
Return the ThreadPoolExecutor's maximum pool size.
int getPoolSize()
Return the current pool size.
ThreadPoolExecutor getThreadPoolExecutor()
Return the underlying ThreadPoolExecutor for native access.
void initialize()
Creates the BlockingQueue and the ThreadPoolExecutor.
boolean prefersShortLivedTasks()
This task executor prefers short-lived work units.
void setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut)
Specify whether to allow core threads to time out.
void setBeanName(String name)
Set the name of the bean in the bean factory that created this bean.
void setCorePoolSize(int corePoolSize)
Set the ThreadPoolExecutor's core pool size.
void setKeepAliveSeconds(int keepAliveSeconds)
Set the ThreadPoolExecutor's keep-alive seconds.
void setMaxPoolSize(int maxPoolSize)
Set the ThreadPoolExecutor's maximum pool size.
void setQueueCapacity(int queueCapacity)
Set the capacity for the ThreadPoolExecutor's BlockingQueue.
void setRejectedExecutionHandler(RejectedExecutionHandler rejectedExecutionHandler)
Set the RejectedExecutionHandler to use for the ThreadPoolExecutor.
void setThreadFactory(ThreadFactory threadFactory)
Set the ThreadFactory to use for the ThreadPoolExecutor's thread pool.
void setThreadNamePrefix(String threadNamePrefix)
Specify the prefix to use for the names of newly created threads.
void setWaitForTasksToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown)
Set whether to wait for scheduled tasks to complete on shutdown.
void shutdown()
Perform a shutdown on the ThreadPoolExecutor.
<T> Future<T> submit(Callable<T> task)
Submit a Callable task for execution, receiving a Future representing that task.
Future<?> submit(Runnable task)
Submit a Runnable task for execution, receiving a Future representing that task.
Protected Methods
BlockingQueue createQueue(int queueCapacity)
Create the BlockingQueue to use for the ThreadPoolExecutor.
[Expand]
Inherited Methods
From class org.springframework.scheduling.backportconcurrent.CustomizableThreadFactory
From class org.springframework.util.CustomizableThreadCreator
From class java.lang.Object
From interface java.util.concurrent.Executor
From interface org.springframework.beans.factory.BeanNameAware
From interface org.springframework.beans.factory.DisposableBean
From interface org.springframework.beans.factory.InitializingBean
From interface org.springframework.core.task.AsyncTaskExecutor
From interface org.springframework.core.task.TaskExecutor
From interface org.springframework.scheduling.SchedulingTaskExecutor

Fields

protected final Log logger

Public Constructors

public ThreadPoolTaskExecutor ()

Public Methods

public void afterPropertiesSet ()

Calls initialize() after the container applied all property values.

See Also

public void destroy ()

Calls shutdown when the BeanFactory destroys the task executor instance.

See Also

public void execute (Runnable task, long startTimeout)

Execute the given task.

Parameters
task the Runnable to execute (never null)
startTimeout the time duration (milliseconds) within which the task is supposed to start. This is intended as a hint to the executor, allowing for preferred handling of immediate tasks. Typical values are TIMEOUT_IMMEDIATE or TIMEOUT_INDEFINITE (the default as used by execute(Runnable)).

public void execute (Runnable task)

Implementation of both the JSR-166 backport Executor interface and the Spring TaskExecutor interface, delegating to the ThreadPoolExecutor instance.

Parameters
task the Runnable to execute (never null)
See Also
  • edu.emory.mathcs.backport.java.util.concurrent.Executor#execute(Runnable)
  • execute(Runnable)

public int getActiveCount ()

Return the number of currently active threads.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#getActiveCount()

public int getCorePoolSize ()

Return the ThreadPoolExecutor's core pool size.

public int getKeepAliveSeconds ()

Return the ThreadPoolExecutor's keep-alive seconds.

public int getMaxPoolSize ()

Return the ThreadPoolExecutor's maximum pool size.

public int getPoolSize ()

Return the current pool size.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#getPoolSize()

public ThreadPoolExecutor getThreadPoolExecutor ()

Return the underlying ThreadPoolExecutor for native access.

Returns
  • the underlying ThreadPoolExecutor (never null)
Throws
IllegalStateException if the ThreadPoolTaskExecutor hasn't been initialized yet

public void initialize ()

Creates the BlockingQueue and the ThreadPoolExecutor.

See Also

public boolean prefersShortLivedTasks ()

This task executor prefers short-lived work units.

Returns
  • true if this TaskExecutor prefers short-lived tasks

public void setAllowCoreThreadTimeOut (boolean allowCoreThreadTimeOut)

Specify whether to allow core threads to time out. This enables dynamic growing and shrinking even in combination with a non-zero queue (since the max pool size will only grow once the queue is full).

Default is "false". Note that this feature is only available on backport-concurrent 3.0 or above (based on the code in Java 6).

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#allowCoreThreadTimeOut(boolean)

public void setBeanName (String name)

Set the name of the bean in the bean factory that created this bean.

Invoked after population of normal bean properties but before an init callback such as afterPropertiesSet() or a custom init-method.

Parameters
name the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the BeanFactoryUtils#originalBeanName(String) method to extract the original bean name (without suffix), if desired.

public void setCorePoolSize (int corePoolSize)

Set the ThreadPoolExecutor's core pool size. Default is 1.

This setting can be modified at runtime, for example through JMX.

public void setKeepAliveSeconds (int keepAliveSeconds)

Set the ThreadPoolExecutor's keep-alive seconds. Default is 60.

This setting can be modified at runtime, for example through JMX.

public void setMaxPoolSize (int maxPoolSize)

Set the ThreadPoolExecutor's maximum pool size. Default is Integer.MAX_VALUE.

This setting can be modified at runtime, for example through JMX.

public void setQueueCapacity (int queueCapacity)

Set the capacity for the ThreadPoolExecutor's BlockingQueue. Default is Integer.MAX_VALUE.

Any positive value will lead to a LinkedBlockingQueue instance; any other value will lead to a SynchronousQueue instance.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue
  • edu.emory.mathcs.backport.java.util.concurrent.SynchronousQueue

public void setRejectedExecutionHandler (RejectedExecutionHandler rejectedExecutionHandler)

Set the RejectedExecutionHandler to use for the ThreadPoolExecutor. Default is the ThreadPoolExecutor's default abort policy.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.AbortPolicy

public void setThreadFactory (ThreadFactory threadFactory)

Set the ThreadFactory to use for the ThreadPoolExecutor's thread pool.

Default is this executor itself (i.e. the factory that this executor inherits from). See CustomizableThreadCreator's javadoc for available bean properties.

public void setThreadNamePrefix (String threadNamePrefix)

Specify the prefix to use for the names of newly created threads. Default is "SimpleAsyncTaskExecutor-".

public void setWaitForTasksToCompleteOnShutdown (boolean waitForJobsToCompleteOnShutdown)

Set whether to wait for scheduled tasks to complete on shutdown.

Default is "false". Switch this to "true" if you prefer fully completed tasks at the expense of a longer shutdown phase.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#shutdown()
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#shutdownNow()

public void shutdown ()

Perform a shutdown on the ThreadPoolExecutor.

See Also
  • edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor#shutdown()

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

Submit a Callable task for execution, receiving a Future representing that task. The Future will return the Callable's result upon completion.

Parameters
task the Callable to execute (never null)
Returns
  • a Future representing pending completion of the task

public Future<?> submit (Runnable task)

Submit a Runnable task for execution, receiving a Future representing that task. The Future will return a null result upon completion.

Parameters
task the Runnable to execute (never null)
Returns
  • a Future representing pending completion of the task

Protected Methods

protected BlockingQueue createQueue (int queueCapacity)

Create the BlockingQueue to use for the ThreadPoolExecutor.

A LinkedBlockingQueue instance will be created for a positive capacity value; a SynchronousQueue else.

Parameters
queueCapacity the specified queue capacity
Returns
  • the BlockingQueue instance
See Also
  • edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue
  • edu.emory.mathcs.backport.java.util.concurrent.SynchronousQueue