Java線程池的使用及工作原理
關(guān)注我們,設(shè)為星標(biāo),每天7:30不見不散,架構(gòu)路上與您共享 回復(fù)"架構(gòu)師"獲取資源
前言
什么是線程池?
線程池要解決什么問題?
線程池的使用
線程池的創(chuàng)建
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
常用阻塞隊列
ArrayBlockingQueue
LinkedBlockingQueue
線程工廠
ThreadFactory threadFactory = ThreadFactoryBuilder.create().setNamePrefix("myThread-").build();
拒絕策略
線程池的執(zhí)行邏輯
// 創(chuàng)建線程工廠
ThreadFactory threadFactory = ThreadFactoryBuilder.create().setNamePrefix("myThread-").build();
// 創(chuàng)建線程池
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), threadFactory, new ThreadPoolExecutor.AbortPolicy());
execute()方法
// 組合值;保存了線程池的工作狀態(tài)和工作線程數(shù)
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
public void execute(Runnable command) {
// 任務(wù)為空 拋出NPE
if (command == null)
throw new NullPointerException();
// 獲取線程池狀態(tài)
int c = ctl.get();
// 如果工作線程數(shù)小于核心線程數(shù)就創(chuàng)建新線程
if (workerCountOf(c) < corePoolSize) {
if (addWorker(command, true))
return;
c = ctl.get();
}
// 如果線程池處于Running狀態(tài),就把任務(wù)放在隊列尾部
if (isRunning(c) && workQueue.offer(command)) {
// 重新檢查線程池狀態(tài)
int recheck = ctl.get();
// 如果線程池不是Running狀態(tài),就移除剛才添加的任務(wù),并執(zhí)行拒絕策略
if (! isRunning(recheck) && remove(command))
reject(command);
// 是Running狀態(tài),就添加線程
else if (workerCountOf(recheck) == 0)
addWorker(null, false);
}
// 添加任務(wù)失敗,執(zhí)行拒絕策略
else if (!addWorker(command, false))
reject(command);
}
// addWorker()完成線程的創(chuàng)建
執(zhí)行流程
文章來源:https://blog.csdn.net/lhc_makefunny/article/details/117308066

到此文章就結(jié)束了。如果今天的文章對你在進(jìn)階架構(gòu)師的路上有新的啟發(fā)和進(jìn)步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進(jìn)階架構(gòu)師,在后臺回復(fù)“加群”即可入群。
這些年小編給你分享過的干貨
1.SpringBoot物流管理項目,拿去學(xué)習(xí)吧(附源碼)
2.ERP系統(tǒng),自帶進(jìn)銷存+財務(wù)+生產(chǎn)功能,拿來即用(附源碼)
3.帶工作流的SpringBoot后臺管理項目快速開發(fā)(附源碼)
4.最好的OA系統(tǒng),拿來即用,非常方便(附源碼)
5.SpringBoot+Vue完整的外賣系統(tǒng),手機(jī)端和后臺管理,附源碼!
6.SpringBoot+Vue 可視化拖拽編輯的大屏項目(附源碼)

轉(zhuǎn)發(fā)在看就是最大的支持??
評論
圖片
表情



