java 執行緒和執行緒池對比

2021-06-28 02:29:50 字數 1428 閱讀 1473

執行緒池的作用

:執行緒池是為突發大量爆發的執行緒設計的,通過有限的幾個固定執行緒為大量的操作服務,減少了建立和銷毀執行緒所需要的時間,從而提高效率。

如果乙個執行緒的時間非常長,就沒必須使用執行緒池了

(不是不能作長時間操作,而是不適合)。

threadpool

中的執行緒不用手動開始,也不能手動取消,要做的只是把工作函式排入執行緒池,剩下的工作將由系統自動完成,也就是說我們不能控制線程池中的執行緒。如果想對執行緒進行更多的控制,那麼就不適合使用執行緒池。在以下情況中不宜使用

threadpool

類而應該使用單獨的

thread類:

1、執行緒執行需要很長的時間; 2

、需要為執行緒指定詳細的優先順序; 3

、在執行過程中需要對執行緒進行操作,比如睡眠、掛起等。 所以

threadpool

適合於併發執行若干個執行時間不長且互不干擾的函式。

使用執行緒池的方式是復用執行緒的,而不使用執行緒池的方式是每次都要建立執行緒。

程式**的執行時間的比較:

public classthreadpooltest

});}

tp.shutdown();

trycatch(interruptedexceptione)

doubleendtime = system.currenttimemillis();

system.out.println(endtime- starttime);

system.out.println(l.size());

}public void threadnotpool()

};thread.start();

trycatch(interruptedexceptione)

}doubleendtime = system.currenttimemillis();

system.out.println(endtime- starttime);

system.out.println(l.size());}}

執行時間的比較:

threadpool:

250ms

threadnotpool

: 19514ms

從結果中可以看出建立執行緒的開銷佔整個時間的比例較大。

程式中需要注意的是,我們主要使用的執行緒池就是

threadpoolexecutor,

此外還有定時執行緒池

scheduledthreadpoolexecutor

。需要注意的是對於

executors.newcachedthreadpool()

方法返回的執行緒池的使用,該方法沒有執行緒的上限的,在使用時一定要當心,因為沒有辦法控制總體的執行緒數量,而每個執行緒都是需要消耗內從的,這可能會導致過多的記憶體被占用。建議盡量不要用這個方法返回執行緒池,而要使用有固定執行緒上限的執行緒池。

注:本文學習筆記總結

java的執行緒和執行緒池

private void text2 start private void method2 catch interruptedexception e log.i qq thread.currentthread getname 結束 執行緒池 private void text3 private vo...

Java執行緒池

executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...

Java執行緒池

一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...