在spring中進行基於Executor的任務調度

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的實現線程

 

  • SyncTaskExecutor:

位於org.springframework.core.task包中,實現了TaskExecutor接口。這個實現不會異步執行任務,相反,每次調用都在發起調用的主線程中執行。code

 

  • SimpleAsyncTaskExecutor:

位於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>

 

 

  • ConcurrentTaskExecutor:

位於org.springframework.scheduling.concurrent包中。該類是JDK 5.0的Executor的適配器,以便將JDK 5.0的Executor的當成Spring的TaskExecutor使用。繼承

 

<bean id="concurrentTaskExecutor"   class="org.springframework.scheduling.concurrent.ConcurrentTaskExecutor"/>

 

  • SimpleThreadPoolTaskExecutor:

位於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>

 

 

 

  • ThreadPoolTaskExecutor:

位於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>

 

 

  • TimerTaskExecutor:

位於org.springframework.scheduling.timer包中。該類使用一個Timer做爲其後臺的實現。

 

<bean id="timerTaskExecutor" class="org.springframework.scheduling.timer.TimerTaskExecutor">
<property name="delay" value="10000" />
</bean>
相關文章
相關標籤/搜索