ThreadPoolTaskExecutor 配置及解釋

1. ThreadPoolTaskExecutor是對ThreadPoolExecutor進行了封裝
一般配置
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
	scope="singleton">
	<property name="corePoolSize" value="5" />
        <property name ="keepAliveSeconds" value ="300" /> 
	<property name="maxPoolSize" value="10" />
	<property name="queueCapacity" value="20" />
</bean>

配置說明:
corePoolSize: 線程池維護線程的最少數量
keepAliveSeconds  線程池維護線程所允許的空閒時間
maxPoolSize   線程池維護線程的最大數量
queueCapacity 線程池所使用的緩衝隊列

當一個任務通過execute(Runnable)方法欲添加到線程池時:
  如果此時線程池中的數量小於corePoolSize,即使線程池中的線程都處於空閒狀態,也要創建新的線程來處理被添加的任務。
  如果此時線程池中的數量等於 corePoolSize,但是緩衝隊列 workQueue未滿,那麼任務被放入緩衝隊列。
  如果此時線程池中的數量大於corePoolSize,緩衝隊列workQueue滿,並且線程池中的數量小於maximumPoolSize,建新的線程來處理被添加的任務。
  如果此時線程池中的數量大於corePoolSize,緩衝隊列workQueue滿,並且線程池中的數量等於maximumPoolSize,那麼通過 handler所指定的策略來處理此任務。也就是:處理任務的優先級爲:核心線程corePoolSize、任務隊列workQueue、最大線程 maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務。

當線程池中的線程數量大於 corePoolSize時,如果某線程空閒時間超過keepAliveTime,線程將被終止。這樣,線程池可以動態的調整池中的線程數。

3.最好在線程中進行try catch,當線程運行時出現什麼問題 task就會停止 不再執行。

2.方法 submit
有返回對象Future<String> ,反饋線程執行時的情況和結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章