SpingFrameWork的ThreadPoolTaskExecutor是輔助JDK的ThreadPoolExecutor的工具類,它將屬性通過JavaBeans的命名規則提供出來,方便進行配置。接下來就講講ThreadPoolTaskExecutor的使用。
最常用的方式就是作為BEAN注入到容器中
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="10" /> <property name="maxPoolSize" value="15" /> <property name="queueCapacity" value="1000" /> </bean>
ThreadPoolExecutor執行器的處理流程:
(1)當線程池大小小於corePoolSize就新建線程,並處理請求.
(2)當線程池大小等於corePoolSize,把請求放入workQueue中,池子里的空閑線程就去從workQueue中取任務並處理.
(3)當workQueue放不下新入的任務時,新建線程加入線程池,並處理請求,如果池子大小撐到了maximumPoolSize就用RejectedExecutionHandler來做拒絕處理.
(4)另外,當線程池的線程數大於corePoolSize的時候,多余的線程會等待keepAliveTime長的時間,如果無請求可處理就自行銷毀.
了解清楚了ThreadPoolExecutor的執行流程,開頭提到的org.springframework.core.task.TaskRejectedException異常也就好理解和解決了.ThreadPoolTaskExecutor類中使用的
就是ThreadPoolExecutor.AbortPolicy()策略,直接拋出異常.
