建立執行緒池可以分為三種方式:
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物件
publicstatic executorservice newfixedthreadpool(int
nthreads)
publicstatic
executorservice newcachedthreadpool()
publicstatic
executorservice newsinglethreadexecutor()
publicstatic scheduledexecutorservice newscheduledthreadpool(int
corepoolsize)
演示:使用執行緒池的一般步驟:
建立執行緒:runnable實現類、callable實現類
呼叫executors類的靜態工廠方法建立乙個executorservice的例項物件,乙個執行緒池建立成功
呼叫executorservice物件的submit方法提交執行緒
shutdown方法關閉執行緒池。
publicstatic
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...