The Spring Framework

org.springframework.scheduling.concurrent
Class ThreadPoolTaskExecutor

java.lang.Object
  extended by org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
All Implemented Interfaces:
Executor, BeanNameAware, DisposableBean, InitializingBean, TaskExecutor, SchedulingTaskExecutor

public class ThreadPoolTaskExecutor
extends Object
implements SchedulingTaskExecutor, Executor, BeanNameAware, InitializingBean, DisposableBean

JavaBean that allows for configuring a JDK 1.5 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 ScheduledThreadPoolExecutor, it is recommended to use a straight definition of the Executor instance or a factory method definition that points to the JDK 1.5 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 as well as the JDK 1.5 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 Executor contract, in particular regarding the TaskRejectedException.

Since:
2.0
Author:
Juergen Hoeller
See Also:
TaskExecutor, Executor, ThreadPoolExecutor, ScheduledThreadPoolExecutor, Executors, ConcurrentTaskExecutor

Field Summary
protected  Log logger
           
 
Constructor Summary
ThreadPoolTaskExecutor()
           
 
Method Summary
 void afterPropertiesSet()
          Calls initialize() after the container applied all property values.
protected  BlockingQueue createQueue(int queueCapacity)
          Create the BlockingQueue to use for the ThreadPoolExecutor.
 void destroy()
          Calls shutdown when the BeanFactory destroys the task executor instance.
 void execute(Runnable task)
          Implementation of both the JDK 1.5 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 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 shutdown()
          Perform a shutdown on the ThreadPoolExecutor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected final Log logger
Constructor Detail

ThreadPoolTaskExecutor

public ThreadPoolTaskExecutor()
Method Detail

setCorePoolSize

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.


getCorePoolSize

public int getCorePoolSize()
Return the ThreadPoolExecutor's core pool size.


setMaxPoolSize

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.


getMaxPoolSize

public int getMaxPoolSize()
Return the ThreadPoolExecutor's maximum pool size.


setKeepAliveSeconds

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.


getKeepAliveSeconds

public int getKeepAliveSeconds()
Return the ThreadPoolExecutor's keep-alive seconds.


setQueueCapacity

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:
LinkedBlockingQueue, SynchronousQueue

setThreadFactory

public void setThreadFactory(ThreadFactory threadFactory)
Set the ThreadFactory to use for the ThreadPoolExecutor's thread pool. Default is the ThreadPoolExecutor's default thread factory.

See Also:
Executors.defaultThreadFactory()

setRejectedExecutionHandler

public void setRejectedExecutionHandler(RejectedExecutionHandler rejectedExecutionHandler)
Set the RejectedExecutionHandler to use for the ThreadPoolExecutor. Default is the ThreadPoolExecutor's default abort policy.

See Also:
ThreadPoolExecutor.AbortPolicy

setBeanName

public void setBeanName(String name)
Description copied from interface: BeanNameAware
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 InitializingBean.afterPropertiesSet() or a custom init-method.

Specified by:
setBeanName in interface BeanNameAware
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.

afterPropertiesSet

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

Specified by:
afterPropertiesSet in interface InitializingBean
See Also:
initialize()

initialize

public void initialize()
Creates the BlockingQueue and the ThreadPoolExecutor.

See Also:
createQueue(int)

createQueue

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:
LinkedBlockingQueue, SynchronousQueue

getThreadPoolExecutor

public ThreadPoolExecutor getThreadPoolExecutor()
                                         throws IllegalStateException
Return the underlying ThreadPoolExecutor for native access.

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

execute

public void execute(Runnable task)
Implementation of both the JDK 1.5 Executor interface and the Spring TaskExecutor interface, delegating to the ThreadPoolExecutor instance.

Specified by:
execute in interface Executor
Specified by:
execute in interface TaskExecutor
Parameters:
task - the Runnable to execute (never null)
See Also:
Executor.execute(Runnable), TaskExecutor.execute(Runnable)

prefersShortLivedTasks

public boolean prefersShortLivedTasks()
This task executor prefers short-lived work units.

Specified by:
prefersShortLivedTasks in interface SchedulingTaskExecutor
Returns:
true if this TaskExecutor prefers short-lived tasks

getPoolSize

public int getPoolSize()
Return the current pool size.

See Also:
ThreadPoolExecutor.getPoolSize()

getActiveCount

public int getActiveCount()
Return the number of currently active threads.

See Also:
ThreadPoolExecutor.getActiveCount()

destroy

public void destroy()
Calls shutdown when the BeanFactory destroys the task executor instance.

Specified by:
destroy in interface DisposableBean
See Also:
shutdown()

shutdown

public void shutdown()
Perform a shutdown on the ThreadPoolExecutor.

See Also:
ThreadPoolExecutor.shutdown()

The Spring Framework

Copyright © 2002-2007 The Spring Framework.