為什么要使用線程池?


為了減少創建和銷毀線程的次數,讓每個線程可以多次使用,可根據系統情況調整執行的線程數量,防止消耗過多內存,所以我們可以使用線程池.

java中線程池的頂級接口是Executor(e可rai kei ter),ExecutorService是Executor的子類,也是真正的線程池接口,它提供了提交任務關閉線程池等方法。調用submit方法提交任務還可以返回一個Future(fei 曲兒)對象,利用該對象可以了解任務執行情況,獲得任務的執行結果取消任務

由於線程池的配置比較復雜,JavaSE中定義了Executors類就是用來方便創建各種常用線程池的工具類。通過調用該工具類中的方法我們可以創建單線程池(newSingleThreadExecutor),固定數量的線程池(newFixedThreadPool),可緩存線程池(newCachedThreadPool),大小無限制的線程池(newScheduledThreadPool),比較常用的是固定數量的線程池和可緩存的線程池,固定數量的線程池是每提交一個任務就是一個線程,直到達到線程池的最大數量,然后后面進入等待隊列直到前面的任務完成才繼續執行.可緩存線程池是當線程池大小超過了處理任務所需的線程,那么就會回收部分空閑(一般是60秒無執行)的線程,當有任務來時,又智能的添加新線程來執行.

 

Executors類中還定義了幾個線程池重要的參數,比如說int corePoolSize核心池的大小,也就是線程池中會維持不被釋放的線程數量.int maximumPoolSize線程池的最大線程數,代表這線程池匯總能創建多少線程。corePoolSize :核心線程數,如果運行的線程數少corePoolSize,當有新的任務過來時會創建新的線程來執行這個任務,即使線程池中有其他的空閑的線程。maximumPoolSize:線程池中允許的最大線程數.


免責聲明!

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



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