執行緒池的建立和使用
生成執行緒池採用了工具類executors的靜態方法,一下是幾種常見的執行緒池。
singlethreadexecutor:單個後台執行緒(其緩衝佇列是無界的)
public
static executorservice newsinglethreadexecutor()
簡介:
建立乙個單執行緒的執行緒池。這個執行緒池只用乙個核心執行緒在工作,也就是相當於單執行緒序列執行多個任務。如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序來執行。
fixedthreadpool:只有核心執行緒的執行緒池,大小固定(其緩衝佇列是無界的)
public
static executorservice newfixedthreadpool(int nthreads)
簡介:
建立固定大小的執行緒池。每次提交乙個任務就建立乙個執行緒,知道執行緒達到執行緒池的最大大小。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充乙個新的執行緒。
cachedthreadpool:無界線程池,可以進行自動線程**。
public
static executorservice newcachedthreadpool()
簡介:
如果執行緒池的大小超過了處理任務所需要的執行緒,那麼就會**部分空閒(60秒不執行任務)的執行緒,當任務數增加時,此執行緒池又可以智慧型的新增新執行緒來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴於作業系統(或者說jvm)能夠建立的最大執行緒大小。
synchronousqueue是乙個緩衝區為1的阻塞佇列。
scheduledthreadpool:核心執行緒池固定,大小無限的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。
public
static executorservice newscheduledthreadpool(int corepoolsize)
簡介:
建立乙個週期性執行任務的執行緒池。如果閒置,非核心執行緒池會在default_keepalivemillis時間內**。
執行緒池最常用的提交任務的方法有兩種:
execute:
executorservice.execute(runnable runnable);
submit:
futuretask task = executorservice.submit(runnable runnable);
futuretask task = executorservice.submit(runnable runnable,t result);
futuretask task = executorservice.sumbit(callable callable);
submit(callable callable)的實現,submit(runnable runnable)同理。
public
futuresubmit(callabletask)
可以看出submit開啟的是有返回結果的任務,會返回乙個futuretask物件,這樣就能通過get()方法得到結果。submit最終呼叫的也是executor(runnable runnable),submit只是將callable物件或runnable封裝成乙個futuretask物件,因為futuretask是個runnable,所以在executor中執行。
今天的總結就到這裡!!!
感謝愛技術的你們的陪伴!!!
我以後還會繼續更新知識!!!
Java執行緒池
executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...
Java執行緒池
一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...
java 執行緒池
1.執行緒池的作用 限制系統中執行執行緒的數量 2.為什麼要用執行緒池 2.1.減少了建立和銷毀執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務.2.2 可以根據系統的承受能力,調整執行緒池中工作線執行緒的數目,防止因為消耗過多的記憶體,而把伺服器累趴下。3.執行緒池介面類 3.1 ex...