Executorjava
java.util.concurrent.Executor接口的主要目的是要將「任務提交」和「任務執行」二者分離解耦。該接口定義了任務提交的方法,實現者能夠提供不一樣的任務運行機制,解決具體的線程使用規則、調度方式等問題。spring
Executor只有一個方法,即void execute(Runnable command) ,它接受任何實現了Runnable的實例,這個實例表明了一個須要執行的任務。併發
Spring對Executor所提供的抽象異步
Spring的org.springframework.core.task.TaskExecutor接口等同於java.util.concurrent.Executor接口。該接口和JDK 5.0的Executor接口擁相同的execute(Runnable task)方法。TaskExecutor擁有一個SchedulingTaskExecutor子接口,新增了任務調度規則定製的功能。spa
Spring發行包中預約義TaskExecutor的實現線程
位於org.springframework.core.task包中,實現了TaskExecutor接口。這個實現不會異步執行任務,相反,每次調用都在發起調用的主線程中執行。code
位於org.springframework.core.task包中。這個實現沒有使用線程池,在每次執行任務時都建立一個新線程。可是,它仍是支持對併發總數設限,當超過線程併發總數限制時,阻塞新的任務直到有可用的資源。blog
<bean id="simpleAsyncTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"> <property name="daemon" value="true" /> <property name="concurrencyLimit" value="2" /> <property name="threadNamePrefix" value="simpleAsyncTaskExecutor" /> </bean>
位於org.springframework.scheduling.concurrent包中。該類是JDK 5.0的Executor的適配器,以便將JDK 5.0的Executor的當成Spring的TaskExecutor使用。繼承
<bean id="concurrentTaskExecutor" class="org.springframework.scheduling.concurrent.ConcurrentTaskExecutor"/>
位於org.springframework.scheduling.quartz包中,這個類其實是繼承於Quartz的SimpleThreadPool類的子類,它將監聽Spring的生命週期回調。當你有線程池,須要在Quartz和非Quartz組件中共用時,該類能夠發揮它的用處。接口
<bean id="simpleThreadPoolTaskExecutor" class="org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor"> <property name="makeThreadsDaemons" value="true"/> <property name="threadCount" value="5" /> <property name="threadNamePrefix" value="simpleThreadPoolTaskExecutor"/> <property name="waitForJobsToCompleteOnShutdown" value="true" /> </bean>
位於org.springframework.scheduling.concurrent包中。這個實現類只能在JDK 5.0中使用,它暴露的一些屬性,方便在Spring中配置一個java.util.concurrent.ThreadPoolExecutor,並把它包裝成TaskExecutor。
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="2" /> <property name="keepAliveSeconds" value="200" /> <property name="maxPoolSize" value="10" /> <property name="queueCapacity" value="60" /> </bean>
位於org.springframework.scheduling.timer包中。該類使用一個Timer做爲其後臺的實現。
<bean id="timerTaskExecutor" class="org.springframework.scheduling.timer.TimerTaskExecutor"> <property name="delay" value="10000" /> </bean>