简单来说就是Spring给你优化了Java的线程池,方便你的使用.
简介:
Spring的TaskExecutor
接口等同于java.util.concurrent.Executor
接口。 实际上,它存在的主要原因是为了在使用线程池的时候,将对Java 5的依赖抽象出来。 这个接口只有一个方法execute(Runnable task)
,它根据线程池的语义和配置,来接受一个执行任务。
最初创建TaskExecutor
是为了在需要时给其他Spring组件提供一个线程池的抽象。 例如ApplicationEventMulticaster
组件、JMS的AbstractMessageListenerContainer
和对Quartz的整合都使用了TaskExecutor
抽象来提供线程池。 当然,如果你的bean需要线程池行为,你也可以使用这个抽象层。
常用的实现类有:
-
SimpleAsyncTaskExecutor
类(异步)这个实现不重用任何线程,或者说它每次调用都启动一个新线程。但是,它还是支持对并发总数设限,当超过线程并发总数限制时,阻塞新的调用,直到有位置被释放。如果你需要真正的池,请继续往下看。
-
这个实现不会异步执行。相反,每次调用都在发起调用的线程中执行。它的主要用处是在不需要多线程的时候,比如简单的test case。