JUC 執行緒池 Executor

2022-06-18 23:12:14 字數 1423 閱讀 4349

建立執行緒池可以分為三種方式:

1. 通過threadpoolexecutor的構造方法,建立threadpoolexecutor的物件,即乙個執行緒池物件;

此構造方法,一共7個引數,5個必須引數,2個帶有預設值的引數;詳細後面說;

傳送:2. 通過executors返回的執行緒池物件;

這種方法建立的常用執行緒池為4種,還可以建立forkjoinpool物件;

可以說是封裝好的方法,通過executors的4種常用靜態方法,返回4種已經封裝好的threadpoolexecutor執行緒池物件;

傳送:3. forkjoinpool併發框架

將乙個大任務拆分成多個小任務後,使用fork可以將小任務分發給其他執行緒同時處理,使用join可以將多個執行緒處理的結果進行彙總;這實際上就是分治思想。

executors 返回的執行緒池物件的弊端如下:

fixedthreadpool 和 singlethreadpool : 允許的請求佇列長度為 integer.max_value ,可能會堆積大量的請求,從而導致 oom 。

cachedthreadpool 和 scheduledthreadpool : 允許的建立執行緒數量為 integer.max_value ,可能會建立大量的執行緒,從而導致 oom 。

只要用於返回executorservice物件

public

static executorservice newfixedthreadpool(int

nthreads)

public

static

executorservice newcachedthreadpool()

public

static

executorservice newsinglethreadexecutor()

public

static scheduledexecutorservice newscheduledthreadpool(int

corepoolsize)

演示:使用執行緒池的一般步驟:

建立執行緒:runnable實現類、callable實現類

呼叫executors類的靜態工廠方法建立乙個executorservice的例項物件,乙個執行緒池建立成功

呼叫executorservice物件的submit方法提交執行緒

shutdown方法關閉執行緒池。

public

static

void

main(string args)

};//向執行緒池提交兩個執行緒

pool.submit(target);

pool.submit(target);

//關閉執行緒池

pool.shutdown();

}

J U C執行緒池

執行緒的建立和切換都是代價比較大的。所以,我們需要有乙個好的方案能做到執行緒的復用,這就涉及到乙個概念 執行緒池。合理的使用執行緒池能夠帶來3個很明顯的好處 降低資源消耗 通過重用已經建立的執行緒來降低執行緒建立和銷毀的消耗 提高響應速度 任務到達時不需要等待執行緒建立就可以立即執行。提高執行緒的可...

執行緒池框架executor

eexecutor作為靈活且強大的非同步執行框架,其支援多種不同型別的任務執行策略,提供了一種標準的方法將任務的提交過程和執行過程解耦開發,基於生產者 消費者模式,其提交任務的執行緒相當於生產者,執行任務的執行緒相當於消費者,並用runnable來表示任務,executor的實現還提供了對生命週期的...

j u c執行緒 執行緒池

final void runworker worker w catch runtimeexception x catch error x catch throwable x finally finally completedabruptly false finally private runnabl...