java創(chuàng)建線程池的方式有幾種 Java線程池?
Java線程池?多線程就是合理分配計算機資源,創(chuàng)建不同的線程來處理不同的任務(wù)。然而,對于計算機來說,創(chuàng)建一個線程或銷毀一個線程是很昂貴的。有時候有很多事情需要同時處理,所以我們需要頻繁地創(chuàng)建和銷毀線程
Java線程池?
多線程就是合理分配計算機資源,創(chuàng)建不同的線程來處理不同的任務(wù)。然而,對于計算機來說,創(chuàng)建一個線程或銷毀一個線程是很昂貴的。有時候有很多事情需要同時處理,所以我們需要頻繁地創(chuàng)建和銷毀線程,這需要花費很多時間。要解決這個問題,可以參考線程池的概念。
所謂線程池,就是集中管理線程。需要線程時,可以從線程池中獲取空閑線程,這樣可以減少頻繁的創(chuàng)建和銷毀線程,節(jié)省大量時間,減少很多不必要的操作。
java中提供了ThreadPoolExecutor類來管理線程。此類從AbstractExecutorService繼承,后者實現(xiàn)ExecutorService接口。我們可以使用ThreadPoolExecutor來創(chuàng)建線程池。
什么是線程池,如何使用,為什么要用?
首先,線程池的作用:
線程池的作用是限制系統(tǒng)中執(zhí)行線程的數(shù)量。
根據(jù)系統(tǒng)的環(huán)境,可以自動或手動設(shè)置線程數(shù)量,以達到最佳運行效果;少了浪費系統(tǒng)資源,多了造成系統(tǒng)擁塞,效率低下。使用線程池控制線程數(shù)量,其他線程排隊等待。在一個任務(wù)被執(zhí)行后,從隊列中取出前面的任務(wù)并開始執(zhí)行。如果隊列中沒有正在等待的進程,那么線程池的這個資源正在等待。當(dāng)一個新任務(wù)需要運行時,如果線程池中有等待的工作線程,就可以開始運行;否則,進入等待隊列。
二、如何使用:
配置一個線程池比較復(fù)雜,尤其是如果不清楚線程池的原理,很有可能配置的線程池不是最優(yōu)的,所以在Executors類中提供了一些靜態(tài)工廠來生成一些常用的線程池。
創(chuàng)建單線程線程池。這個線程池中只有一個線程在工作,相當(dāng)于單個線程串行執(zhí)行所有任務(wù)。如果這個唯一的線程由于異常而結(jié)束,一個新的線程將取代它。這個線程池確保所有任務(wù)按照提交的順序執(zhí)行。
創(chuàng)建一個固定大小的線程池。每次提交任務(wù)時創(chuàng)建一個線程,直到線程達到線程池的最大大小。一旦線程池的大小達到最大值,它將保持不變。如果一個線程由于執(zhí)行異常而結(jié)束,線程池將被一個新線程補充。
?
1.創(chuàng)建和銷毀線程的數(shù)量減少了,每個工作線程可以重用來執(zhí)行多個任務(wù)。2.根據(jù)系統(tǒng) s的承載能力,可以調(diào)整線程池中工作線程的數(shù)量,防止服務(wù)器因內(nèi)存消耗過大而耗盡(每個線程需要1MB左右的內(nèi)存,打開的線程越多,消耗的內(nèi)存越多,最后崩潰)。
Java中線程池的頂層接口是Executor,但嚴格來說Executor并不是線程池,只是一個執(zhí)行線程的工具。真正的線程池接口是ExecutorService。