古詩詞大全網 - 成語故事 - 什麽是java線程池

什麽是java線程池

多線程是為了能夠讓計算機資源合理的分配,對於處理不同的任務創建不同的線程進行處理,但是計算機創建壹個線程或者銷毀壹個線程所花費的也是比較昂貴的,有時候需要同時處理的事情比較多,就需要我們頻繁的進行線程的創建和銷毀,這樣花費的時間也是比較多的。為了解決這壹問題,我們就可以引用線程池的概念。

所謂線程池就是將線程集中管理起來,當需要線程的時候,可以從線程池中獲取空閑的線程,這樣可以減少線程的頻繁創建與銷毀,節省很大的時間和減少很多不必要的操作。

在java中提供了ThreadPoolExecutor類來進行線程的管理,這個類繼承於AbstractExecutorService,而AbstractExecutorService實現了ExecutorService接口,我們可以使用ThreadPoolExecutor來進行線程池的創建。

在ThreadPoolExecutor的構造方法中,有多個參數,可以配置不同的參數來進行優化。這個類的源碼構造方法為:

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個參數代表的意義分別為

corePoolSize : 線程池中的核心線程數量,當線程池中當前的線程數小於這個配置的時候,如果有壹個新的任務到來,即使線程池中還存在空閑狀態的線程,程序也會繼續創建壹個新的線程放進線程池當中

maximumPoolSize: 線程池中的線程最大數量

keepAliveTime:當線程池中的線程數量大於配置的核心線程數量(corePoolSize)的時候,如果當前有空閑的線程,則當這個空閑線程可以存在的時間,如果在keepAliveTime這個時間點內沒有新的任務使用這個線程,那麽這個線程將會結束,核心線程不會結束,但是如果配置了allowCoreThreadTimeOut = true,則當空閑時間超過keepAliveTime之後,線程也會被結束調,默認allowCoreThreadTimeOut = false,即表示默認情況下,核心線程會壹直存在於線程池當中。

unit : 空閑線程保持連接時間(keepAliveTime)的時間單位

workQueue:阻塞的任務隊列,用來保存等待需要執行的任務。

threadFactory :線程工廠,可以根據自己的需求去創建線程的對象,設置線程的名稱,優先級等屬性信息。

handler:當線程池中存在的線程數超過設置的最大值之後,新的任務就會被拒絕,可以自己定義壹個拒絕的策略,當新任務被拒絕之後,就會使用hander方法進行處理。

在java中也提供了Executors工具類,在這個工具類中提供了多個創建線程池的靜態方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個方法都是創建了ThreadPoolExecutor對象,不同的是,每個對象的初始 參數值不壹樣;