執行緒池原理

2021-10-01 09:22:38 字數 2613 閱讀 2385

private static final threadpoolexecutor executor_service = new threadpoolexecutor(100,120,60, timeunit.seconds,

new arrayblockingqueue<>(1000),

new threadfactorybuilder().setnameformat("thread-pool-%d").build(),

new threadpoolexecutor.callerrunspolicy());

//ct1的低29位表示執行緒池中的執行緒數,高3為表示當前執行緒狀態

private final atomicinteger ctl = new atomicinteger(ctlof(running, 0));

private static final int count_bits = integer.size - 3;

private static final int capacity = (1 << count_bits) - 1;

// runstate is stored in the high-order bits

//執行狀態,高3位為111

private static final int running = -1 << count_bits;

//關閉狀態,高3位為000,在此狀態下,執行緒池不再接受新任務,但是仍然處理阻塞佇列中的任務

private static final int shutdown = 0 << count_bits;

//停止狀態,高3位為001,在此狀態下,執行緒池不再接受新任務,也不會處理阻塞佇列中的任務,正在執行的任務也會停止

private static final int stop = 1 << count_bits;

//高3位為010

private static final int tidying = 2 << count_bits;

//終止狀態,高3位為011

//進入這裡說明核心執行緒數滿了

//判斷當前執行緒是執行狀態並且阻塞佇列成功插入command,繼續執行

if (isrunning(c) && workqueue.offer(command))

//阻塞佇列已滿,再嘗試建立一次執行緒,如果失敗就執行飽和策略

else if (!addworker(command, false))

reject(command);

}

private final hashsetworkers = new hashset();

//core代表是否是核心執行緒

private boolean addworker(runnable firsttask, boolean core)

}//下面**就是嘗試往workers插入新worker

boolean workerstarted = false;

boolean workeradded = false;

worker w = null;

try

} finally

if (workeradded)

}} finally

return workerstarted;

}

final void runworker(worker w)  catch (runtimeexception x)  catch (error x)  catch (throwable x)  finally 

} finally

}completedabruptly = false;

} finally

}

private runnable gettask() 

int wc = workercountof(c);

// 如果執行緒池允許執行緒超時或者當前執行緒數大於核心執行緒數,則會進行超時處理

boolean timed = allowcorethreadtimeout || wc > corepoolsize;

if ((wc > maximumpoolsize || (timed && timedout))

&& (wc > 1 || workqueue.isempty()))

try catch (interruptedexception retry) }}

執行緒池1 執行緒池原理

執行緒池可以看做容納執行緒的容器 乙個應用程式最多只能有乙個執行緒池 threadpool靜態類通過queueuserworkitem 方法將工作函式排入執行緒池 每排入乙個工作函式,就相當於請求建立乙個執行緒 執行緒池的作用 執行緒池是為突然大量爆發的執行緒設計的,通過有限的幾個固定執行緒為大量的...

執行緒池原理

一 執行緒池優勢 1.降低資源消耗,通過反覆利用已建立執行緒降低執行緒建立和銷毀造成的消耗 2.提高響應速度,當任務到達時,任務可以不需要等到執行緒的建立就能立即執行 3.提高執行緒的可管理性 二 執行緒池原理 當提交乙個任務時候,執行緒池處理的這麼乙個流程 文字描述 1.執行緒池判斷核心執行緒池是...

執行緒池原理

有少量請求 建立執行緒 處理 執行緒 交給乙個執行緒處理,處理完畢後,得到乙個結果,傳送給客戶端 有大量請求 例如一秒中發來3000個請求 假設有8個執行緒 生產者消費者模型 將3000個請求放到乙個佇列中,8個執行緒從佇列中取任務並完成它 對於32為系統,1個程序最多能建立多少個執行緒?32位的作...