執行緒池的作用
:執行緒池是為突發大量爆發的執行緒設計的,通過有限的幾個固定執行緒為大量的操作服務,減少了建立和銷毀執行緒所需要的時間,從而提高效率。
如果乙個執行緒的時間非常長,就沒必須使用執行緒池了
(不是不能作長時間操作,而是不適合)。
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...