JUC練習10 執行緒池

2022-09-19 22:54:11 字數 2040 閱讀 2797

一,概念

池化技術:執行緒的執行是占用系統資源的,每個執行緒的誕生都需要有(建立——初始化——使用——銷毀)等步驟,為了避免多次重複的建立和銷毀執行緒利用率,提出了池化技術,先建立好程序放到程序池中,如果要使用程序了就從池裡面拿來用,用完之後就還回去。這就是池化技術

傳統:建立執行緒——》使用執行緒——》銷毀程序

池化技術:取出執行緒)——》使用執行緒——》歸還執行緒

池化技術優點:降低資源消耗,提高系統的速度,方便對程序的管理

二,執行緒池

1,三大方法

/**

* newsinglethreadexecutor 執行緒池中就乙個執行緒

* newfixedthreadpool 通過引數自行定義執行緒池的大小

* newcachedthreadpool 根據實際情況自動伸縮執行緒池的大小

*/public static void test6()

);// }

// threadpoll1.shutdown();

// for (int i=0;i<10;i++)

// );

// }

// threadpoll2.shutdown();

for (int i=0;i<10;i++));}

threadpoll3.shutdown();

}

原始碼分析:

public static executorservice newsinglethreadexecutor() 

public static executorservice newfixedthreadpool(int nthreads)

public static executorservice newcachedthreadpool()

這三個方法的本質都是threadpoolexecutor

public threadpoolexecutor(int corepoolsize,//核心執行緒數

int maximumpoolsize,//最大執行緒數

long keepalivetime,//連線儲存的時間

timeunit unit,//時間單位

blockingqueueworkqueue,//阻塞佇列

threadfactory threadfactory,//執行緒工廠

rejectedexecutionhandler handler)

結論:

2,7大引數,使用原始方法進行執行緒池的建立

int corepoolsize,//核心執行緒數

int maximumpoolsize,//最大執行緒數

long keepalivetime,//連線儲存的時間

timeunit unit,//時間單位

blockingqueueworkqueue,//阻塞佇列

threadfactory threadfactory,//執行緒工廠

rejectedexecutionhandler handler)

/*** 使用預設的執行緒池方式進行建立,根據需求去定製

* 如下配置:核心執行緒為2,最大執行緒為5,超時時間為3秒,處理不了的請求放入的佇列長度為5,使用的拒絕策略為拋異常

* 正常情況下是核心的2個執行緒加上佇列來處理請求,如果請求數》核心執行緒資料+佇列長度,會申請新的執行緒加入處理(當前執行緒數《最大執行緒數)

*/public static void test7());}

threadpoolexecutor.shutdown();

}

3,最大執行緒數該如何定義

//1,cpu密集型  獲取cpu的核數作為執行緒的最大數  runtime.getruntime().**ailableprocessors()

//2,io密集型 判斷你的程式中十分耗io的執行緒有幾個,最大執行緒數大於它即可

J U C執行緒池

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

j u c執行緒 執行緒池

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

JUC 執行緒池數量

去乙個網頁抓資料儲存到資料庫中,這個過程也就1秒中吧 執行緒池fixedthreadpool配製多少合適?如果是cpu密集型應用,則執行緒池大小設定為n 1 n為cpu的核數 如果是io密集型應用,則執行緒池大小設定為2n 1 這裡去乙個網頁抓資料 需要建立http請求響 io 應後拿到資料,然後再...