19. 用過spring的線程池還是java的線程池?


  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()策略,直接拋出異常. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM