Class ConcurrentTaskExecutor
- java.lang.Object
- org.springframework.scheduling.concurrent.ConcurrentTaskExecutor
- All Implemented Interfaces:
Executor,AsyncListenableTaskExecutor,AsyncTaskExecutor,TaskExecutor,SchedulingTaskExecutor
- Direct Known Subclasses:
ConcurrentTaskScheduler,DefaultManagedTaskExecutor
public class ConcurrentTaskExecutor extends Object implements AsyncListenableTaskExecutor, SchedulingTaskExecutor
Adapter that takes ajava.util.concurrent.Executorand exposes a SpringTaskExecutorfor it. Also detects an extendedjava.util.concurrent.ExecutorService, adapting theAsyncTaskExecutorinterface accordingly.Autodetects a JSR-236
ManagedExecutorServicein order to exposeManagedTaskadapters for it, exposing a long-running hint based onSchedulingAwareRunnableand an identity name based on the given Runnable/Callable'stoString(). For JSR-236 style lookup in a Java EE 7 environment, consider usingDefaultManagedTaskExecutor.Note that there is a pre-built
ThreadPoolTaskExecutorthat allows for defining aThreadPoolExecutorin bean style, exposing it as a SpringTaskExecutordirectly. This is a convenient alternative to a raw ThreadPoolExecutor definition with a separate definition of the present adapter class.- Since:
- 2.0
- Author:
- Juergen Hoeller
- See Also:
Executor,ExecutorService,ThreadPoolExecutor,Executors,DefaultManagedTaskExecutor,ThreadPoolTaskExecutor
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classConcurrentTaskExecutor.ManagedTaskBuilderDelegate that wraps a given Runnable/Callable with a JSR-236 ManagedTask, exposing a long-running hint based onSchedulingAwareRunnableand a given identity name.
Field Summary
Fields inherited from interface org.springframework.core.task.AsyncTaskExecutor
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
Constructor Summary
Constructors Constructor Description ConcurrentTaskExecutor()Create a new ConcurrentTaskExecutor, using a single thread executor as default.ConcurrentTaskExecutor(Executor concurrentExecutor)Create a new ConcurrentTaskExecutor, using the givenExecutor.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidexecute(Runnable task)Execute the giventask.voidexecute(Runnable task, long startTimeout)Execute the giventask.ExecutorgetConcurrentExecutor()Return theExecutorthat this adapter delegates to.booleanprefersShortLivedTasks()This task executor prefers short-lived work units.voidsetConcurrentExecutor(Executor concurrentExecutor)Specify theExecutorto delegate to.voidsetTaskDecorator(TaskDecorator taskDecorator)Specify a customTaskDecoratorto be applied to anyRunnableabout to be executed.Future<?>submit(Runnable task)Submit a Runnable task for execution, receiving a Future representing that task.<T> Future<T>submit(Callable<T> task)Submit a Callable task for execution, receiving a Future representing that task.ListenableFuture<?>submitListenable(Runnable task)Submit aRunnabletask for execution, receiving aListenableFuturerepresenting that task.<T> ListenableFuture<T>submitListenable(Callable<T> task)Submit aCallabletask for execution, receiving aListenableFuturerepresenting that task.
Constructor Detail
ConcurrentTaskExecutor
public ConcurrentTaskExecutor()
Create a new ConcurrentTaskExecutor, using a single thread executor as default.- See Also:
Executors.newSingleThreadExecutor()
ConcurrentTaskExecutor
public ConcurrentTaskExecutor(Executor concurrentExecutor)
Create a new ConcurrentTaskExecutor, using the givenExecutor.Autodetects a JSR-236
ManagedExecutorServicein order to exposeManagedTaskadapters for it.- Parameters:
concurrentExecutor- theExecutorto delegate to
Method Detail
setConcurrentExecutor
public final void setConcurrentExecutor(Executor concurrentExecutor)
Specify theExecutorto delegate to.Autodetects a JSR-236
ManagedExecutorServicein order to exposeManagedTaskadapters for it.
getConcurrentExecutor
public final Executor getConcurrentExecutor()
Return theExecutorthat this adapter delegates to.
setTaskDecorator
public final void setTaskDecorator(TaskDecorator taskDecorator)
Specify a customTaskDecoratorto be applied to anyRunnableabout to be executed.Note that such a decorator is not necessarily being applied to the user-supplied
Runnable/Callablebut rather to the actual execution callback (which may be a wrapper around the user-supplied task).The primary use case is to set some execution context around the task's invocation, or to provide some monitoring/statistics for task execution.
NOTE: Exception handling in
TaskDecoratorimplementations is limited to plainRunnableexecution viaexecutecalls. In case of#submitcalls, the exposedRunnablewill be aFutureTaskwhich does not propagate any exceptions; you might have to cast it and callFuture#getto evaluate exceptions.- Since:
- 4.3
execute
public void execute(Runnable task)
Description copied from interface:TaskExecutorExecute the giventask.The call might return immediately if the implementation uses an asynchronous execution strategy, or might block in the case of synchronous execution.
- Specified by:
executein interfaceExecutor- Specified by:
executein interfaceTaskExecutor- Parameters:
task- theRunnableto execute (nevernull)
execute
public void execute(Runnable task, long startTimeout)
Description copied from interface:AsyncTaskExecutorExecute the giventask.- Specified by:
executein interfaceAsyncTaskExecutor- Parameters:
task- theRunnableto execute (nevernull)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 areAsyncTaskExecutor.TIMEOUT_IMMEDIATEorAsyncTaskExecutor.TIMEOUT_INDEFINITE(the default as used byTaskExecutor.execute(Runnable)).
submit
public Future<?> submit(Runnable task)
Description copied from interface:AsyncTaskExecutorSubmit a Runnable task for execution, receiving a Future representing that task. The Future will return anullresult upon completion.- Specified by:
submitin interfaceAsyncTaskExecutor- Parameters:
task- theRunnableto execute (nevernull)- Returns:
- a Future representing pending completion of the task
submit
public <T> Future<T> submit(Callable<T> task)
Description copied from interface:AsyncTaskExecutorSubmit a Callable task for execution, receiving a Future representing that task. The Future will return the Callable's result upon completion.- Specified by:
submitin interfaceAsyncTaskExecutor- Parameters:
task- theCallableto execute (nevernull)- Returns:
- a Future representing pending completion of the task
submitListenable
public ListenableFuture<?> submitListenable(Runnable task)
Description copied from interface:AsyncListenableTaskExecutorSubmit aRunnabletask for execution, receiving aListenableFuturerepresenting that task. The Future will return anullresult upon completion.- Specified by:
submitListenablein interfaceAsyncListenableTaskExecutor- Parameters:
task- theRunnableto execute (nevernull)- Returns:
- a
ListenableFuturerepresenting pending completion of the task
submitListenable
public <T> ListenableFuture<T> submitListenable(Callable<T> task)
Description copied from interface:AsyncListenableTaskExecutorSubmit aCallabletask for execution, receiving aListenableFuturerepresenting that task. The Future will return the Callable's result upon completion.- Specified by:
submitListenablein interfaceAsyncListenableTaskExecutor- Parameters:
task- theCallableto execute (nevernull)- Returns:
- a
ListenableFuturerepresenting pending completion of the task
prefersShortLivedTasks
public boolean prefersShortLivedTasks()
This task executor prefers short-lived work units.- Specified by:
prefersShortLivedTasksin interfaceSchedulingTaskExecutor- Returns:
trueif thisTaskExecutorprefers short-lived tasks