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位的作...