1. 程式人生 > >5.Java線程池的創建和使用

5.Java線程池的創建和使用

html 獲取 fix () executor www 總數 操作 新的

線程池

構建一個新的線程是有一定代價的,因為涉及到與操作系統的交互。如果程序中需要使用大量生命周期很短的線程,就應該使用線程池。

Runnable對象交給線程池來執行,就會有一個線程調用run方法,當run方法退出的時候,線程不會死亡,而是在池中準備為下一個請求提供服務。

另一個使用線程池的理由是為了減少並發編程的數目,創建大量線程會大大降低性能,甚至使虛擬機崩潰,而使用線程池能限制並發編程的總數。

線程池的創建和使用

而創建線程池對象需要使用執行器(Executors),註意要加s,Executor是個接口,而Executors才能創建線程池對象。

//創建一個不限數量的線程池,當執行一個任務的時候,如果有空閑線程用,會給它分配,如果沒有空閑線程,就會創建一個新線程,空閑線程會被保留60秒
ExecutorService executor = Executors.newCachedThreadPool();

//創建一個具有固定數量的線程池,空閑線程也會被一直保留
ExecutorService executor2 = Executors.newFixedThreadPool(5);

//創建一個具有一個線程的線程池,由一個線程一個接一個的執行任務(感覺有點雞肋)
ExecutorService executor3 = Executors.newSingleThreadExecutor();

//創建一個預定執行而構建的固定數量的線程池
ExecutorService executor4 = Executors.newScheduledThreadPool(5);

//創建一個用於預定執行而構建的只有一個線程的線程池
ExecutorService executor5 = Executors.newSingleThreadScheduledExecutor();

最常用的就是前三個,返回的都是ExecutorService對象,ExecutorService也是一個接口。

如果想要查看當前線程池中的線程數,不能使用ExecutorService接口對象獲取,需要把它強轉為它的子類,也就是ThreadPoolExecutor類對象,關於如何使用,在上一篇Callable與Future中有舉例,地址:
https://www.cnblogs.com/Fill/p/9445908.html

5.Java線程池的創建和使用