<!-- client bean -->
The previous code shows different implementations of the TaskExecutor interface. The first bean,
the TaskExecutorAdapter instance, is a simple wrapper around a java.util.concurrence.Executor
instance so that you can deal with in terms of the Spring TaskExecutor interface. This is only slightly
useful because you could conceptually deal in terms of the Executor interface now because Spring 3.0
updates the TaskExecutor interface to extend Executor . You use Spring here to configure an instance of
an Executor and pass it in as the constructor argument.
SimpleAsyncTaskExecutor provides a new Thread for each job submitted. It does no thread pooling
or reuse. Each job submitted runs asynchronously in a thread.
SyncTaskExecutor is the simplest of the implementations of TaskExecutor . Submission of a job is
synchronous and tantamount to launching a Thread , running it, and then join() ing it immediately. It's
effectively the same as manually invoking the run() method in the calling thread, skipping threading all
TimerTaskExecutor uses a java.util.Timer instance and manages jobs
( java.util.concurrent.Callable<T> or java.lang.Runnable instances) for you by running them
on the Timer . You can specify a delay when creating the TimerTaskExecutor , after which all submitted
jobs will start running. Internally, the TimerTaskExecutor converts Callable<T> instances or Runnable
instances that are submitted into TimerTasks , which it then schedules on the Timer . If you schedule
multiple jobs, they will be run serialized on the same thread with the same Timer . If you don't
specify a Timer explicitly, a default one will be created. If you want to explicitly register TimerTask s
on the Timer , use the org.springframework.scheduling.timer.TimerFactoryBean 's scheduledTimerTasks
property. The TimerTaskExecutor doesn't surface methods for more advanced scheduling like the
Timer class does. If you want to schedule at fixed intervals, at a certain Date (point in time) or
for a certain period, you need to manipulate the TimerTask itself. You can do this with the
org.springframework.scheduling.timer.ScheduledTimerTask class, which provides a readily configured
TimerTask that the TimerFactoryBean will schedule appropriately.
To submit jobs just as you have with other TaskExecutors , after a delay simply configure a
TimerFactoryBean and then submit as usual:
<bean id ="timerTaskExecutorWithoutScheduledTimerTasks"
class="org.springframework.scheduling.timer.TimerTaskExecutor" p:delay="10000" />