专业剑 : Spring的线程池(执行器)


Spring用TaskExecutor和TaskScheduler接口提供了异步执行和调度任务的抽象。

Spring的TaskExecutor和java.util.concurrent.Executor接口时一样的,这个接口只有一个方法execute(Runnable task)。

Spring已经内置了许多TaskExecutor的实现,没有必要自己去实现:

SimpleAsyncTaskExecutor: 

这种实现不会重用任何线程,每次调用都会创建一个新的线程。

SyncTaskExecutor: 

这种实现不会异步的执行,相反,每次调用都在发起调用的线程中执行。它的主要用处是在不需要多线程的时候,比如简单的测试用例;

ConcurrentTaskExecutor:

这个实现是对Java 5 java.util.concurrent.Executor类的包装。有另一个ThreadPoolTaskExecutor类更为好用,它暴露了Executor的配置参数作为bean属性。

SimpleThreadPoolTaskExecutor:

这个实现实际上是Quartz的SimpleThreadPool类的子类,它会监听Spring的生命周期回调。当你有线程池,需要在Quartz和非Quartz组件中共用时,这是它的典型用处。

ThreadPoolTaskExecutor: 

这是最常用、最通用的一种实现。它包含了java.util.concurrent.ThreadPoolExecutor的属性,并且用TaskExecutor进行包装。