java執行緒池(2) 常見執行緒池

2021-08-16 10:30:13 字數 1985 閱讀 7635

執行緒池的建立和使用

生成執行緒池採用了工具類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...