org.springframework.scheduling.backportconcurrent
Class ConcurrentTaskExecutor

java.lang.Object
  extended by org.springframework.scheduling.backportconcurrent.ConcurrentTaskExecutor
All Implemented Interfaces:
edu.emory.mathcs.backport.java.util.concurrent.Executor, AsyncTaskExecutor, TaskExecutor, SchedulingTaskExecutor

public class ConcurrentTaskExecutor
extends Object
implements SchedulingTaskExecutor, edu.emory.mathcs.backport.java.util.concurrent.Executor

Adapter that takes a JSR-166 backport edu.emory.mathcs.backport.java.util.concurrent.Executor and exposes a Spring TaskExecutor for it.

NOTE: This class implements Spring's TaskExecutor interface (and hence implicitly the standard Java 5 Executor interface) as well as the JSR-166 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.

Note that there is a pre-built ThreadPoolTaskExecutor that allows for defining a JSR-166 backport ThreadPoolExecutor in bean style, exposing it as a Spring TaskExecutor directly. This is a convenient alternative to a raw ThreadPoolExecutor definition with a separate definition of the present adapter class.

Since:
2.0.3
Author:
Juergen Hoeller
See Also:
Executor, ThreadPoolExecutor, Executors, ThreadPoolTaskExecutor

Field Summary
 
Fields inherited from interface org.springframework.core.task.AsyncTaskExecutor
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
 
Constructor Summary
ConcurrentTaskExecutor()
          Create a new ConcurrentTaskExecutor, using a single thread executor as default.
ConcurrentTaskExecutor(edu.emory.mathcs.backport.java.util.concurrent.Executor concurrentExecutor)
          Create a new ConcurrentTaskExecutor, using the given JSR-166 backport concurrent executor.
 
Method Summary
 void execute(Runnable task)
          Delegates to the specified JSR-166 backport concurrent executor.
 void execute(Runnable task, long startTimeout)
          Execute the given task.
 edu.emory.mathcs.backport.java.util.concurrent.Executor getConcurrentExecutor()
          Return the JSR-166 backport concurrent executor that this adapter delegates to.
 boolean prefersShortLivedTasks()
          This task executor prefers short-lived work units.
 void setConcurrentExecutor(edu.emory.mathcs.backport.java.util.concurrent.Executor concurrentExecutor)
          Specify the JSR-166 backport concurrent executor to delegate to.
<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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConcurrentTaskExecutor

public ConcurrentTaskExecutor()
Create a new ConcurrentTaskExecutor, using a single thread executor as default.

See Also:
Executors.newSingleThreadExecutor()

ConcurrentTaskExecutor

public ConcurrentTaskExecutor(edu.emory.mathcs.backport.java.util.concurrent.Executor concurrentExecutor)
Create a new ConcurrentTaskExecutor, using the given JSR-166 backport concurrent executor.

Parameters:
concurrentExecutor - the JSR-166 backport concurrent executor to delegate to
Method Detail

setConcurrentExecutor

public final void setConcurrentExecutor(edu.emory.mathcs.backport.java.util.concurrent.Executor concurrentExecutor)
Specify the JSR-166 backport concurrent executor to delegate to.


getConcurrentExecutor

public final edu.emory.mathcs.backport.java.util.concurrent.Executor getConcurrentExecutor()
Return the JSR-166 backport concurrent executor that this adapter delegates to.


execute

public void execute(Runnable task)
Delegates to the specified JSR-166 backport concurrent executor.

Specified by:
execute in interface edu.emory.mathcs.backport.java.util.concurrent.Executor
Specified by:
execute in interface TaskExecutor
Parameters:
task - the Runnable to execute (never null)
See Also:
Executor.execute(Runnable)

execute

public void execute(Runnable task,
                    long startTimeout)
Description copied from interface: AsyncTaskExecutor
Execute the given task.

Specified by:
execute in interface AsyncTaskExecutor
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 AsyncTaskExecutor.TIMEOUT_IMMEDIATE or AsyncTaskExecutor.TIMEOUT_INDEFINITE (the default as used by TaskExecutor.execute(Runnable)).

submit

public Future<?> submit(Runnable task)
Description copied from interface: AsyncTaskExecutor
Submit a Runnable task for execution, receiving a Future representing that task. The Future will return a null result upon completion.

Specified by:
submit in interface AsyncTaskExecutor
Parameters:
task - the Runnable to execute (never null)
Returns:
a Future representing pending completion of the task

submit

public <T> Future<T> submit(Callable<T> task)
Description copied from interface: AsyncTaskExecutor
Submit a Callable task for execution, receiving a Future representing that task. The Future will return the Callable's result upon completion.

Specified by:
submit in interface AsyncTaskExecutor
Parameters:
task - the Callable to execute (never null)
Returns:
a Future representing pending completion of the task

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