線(xiàn)程的創(chuàng)建和銷(xiāo)毀都會(huì)消耗大量資源,就好像公司每天上午9點(diǎn)工作時(shí)就招進(jìn)一批員工,晚上6點(diǎn)干完活就辭退一批員工,這都會(huì)銷(xiāo)毀公司大量資源。所以合理利用 “池” 中固定、穩(wěn)定的線(xiàn)程是非常有必要的。
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),禹州網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:禹州等地區(qū)。禹州做網(wǎng)站價(jià)格咨詢(xún):18980820575ThreadPoolExecutor 構(gòu)造方法
ThreadPoolExecutor 共有四個(gè)構(gòu)造方法:
ThreadPoolExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>)
ThreadPoolExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, ThreadFactory)
ThreadPoolExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, RejectedExecutionHandler)
ThreadPoolExecutor(int, int, long, TimeUnit, BlockingQueue<Runnable>, ThreadFactory, RejectedExecutionHandler)
以最多參數(shù)的構(gòu)造方法為例進(jìn)行分析:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
// 核心線(xiàn)程池不能小于0
if (corePoolSize < 0 ||
// 大池大小不能小于等于0
maximumPoolSize <= 0 ||
// 大池大小不能小于核心池大小
maximumPoolSize < corePoolSize ||
// 存活時(shí)間不能小于0
keepAliveTime < 0)
// 否則將會(huì)拋出 IllegalArgumentException 非法參數(shù)異常
throw new IllegalArgumentException();
// 工作隊(duì)列、線(xiàn)程工廠、拒絕執(zhí)行的處理策略都不能為空,否則將會(huì)排除NPE空指針異常
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.acc = System.getSecurityManager() == null ?
null :
AccessController.getContext();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}
1. 參數(shù) corePoolSize 核心線(xiàn)程池大?。?/strong>
線(xiàn)程池中一直會(huì)存活該大小的線(xiàn)程數(shù),即使是沒(méi)有工作(任務(wù))需要執(zhí)行。除非設(shè)置 allowCoreThreadTimeOut 為 true ,線(xiàn)程池中的核心線(xiàn)程會(huì)超時(shí)關(guān)閉。
2. 參數(shù) maximumPoolSize 線(xiàn)程池大大小:
線(xiàn)程池大允許同時(shí)存活的線(xiàn)程的大小。
3. 參數(shù) keepAliveTime 線(xiàn)程空閑時(shí)間:
當(dāng)線(xiàn)程池中的線(xiàn)程空閑時(shí)間達(dá)到 keepAliveTime 時(shí),線(xiàn)程會(huì)被銷(xiāo)毀,僅保留 corePoolSize 大小線(xiàn)程,如果allowCoreThreadTimeOut 為 true ,則線(xiàn)程池中包含核心線(xiàn)程在內(nèi)空閑線(xiàn)程都會(huì)被銷(xiāo)毀。
4. 參數(shù) unit 時(shí)間單位:
keepAliveTime 的時(shí)間單位(枚舉類(lèi)型)TimeUnit ,其可選單位有 TimeUnit.DAYS 天、TimeUnit.HOURS 小時(shí)、TimeUnit.MINUTES 分鐘、TimeUnit.SECONDS秒、TimeUnitMILLISECONDS.毫秒、TimeUnit.MICROSECONDS微秒、TimeUnit.NANOSECONDS納秒,常用的是秒。
5. 參數(shù) workQueue 任務(wù)隊(duì)列(工作隊(duì)列、緩存隊(duì)列):
當(dāng)任務(wù)所需的線(xiàn)程數(shù)達(dá)到核心線(xiàn)程數(shù) corePoolSize 時(shí),新任務(wù)會(huì)放在工作隊(duì)列中排隊(duì)(緩存)等待執(zhí)行。如果任務(wù)所需的線(xiàn)程數(shù)達(dá)到核心線(xiàn)程數(shù) corePoolSize 時(shí),并且工作隊(duì)列已滿(mǎn)時(shí),并且線(xiàn)程池大大小 maximumPoolSize 大于 核心線(xiàn)程池大小 corePoolSize 時(shí),才會(huì)創(chuàng)建新的線(xiàn)程去處理任務(wù)。
經(jīng)常有個(gè)錯(cuò)覺(jué),認(rèn)為當(dāng)任務(wù)所需的線(xiàn)程數(shù)達(dá)到線(xiàn)程池大線(xiàn)程數(shù) maximumPoolSize 時(shí),新任務(wù)才會(huì)進(jìn)入工作隊(duì)列,這是不對(duì)的。
6. 參數(shù) threadFactory 線(xiàn)程工廠:
用于創(chuàng)建線(xiàn)程池中線(xiàn)程的工廠。創(chuàng)建線(xiàn)程時(shí),經(jīng)常會(huì)給這一批具有處理相同類(lèi)型任務(wù)的線(xiàn)程命名和線(xiàn)程工廠命名(*線(xiàn)程工廠命名是指給poolName線(xiàn)程池命名,作為線(xiàn)程名稱(chēng)的前綴prefix),以此來(lái)標(biāo)識(shí)線(xiàn)程的用處,在分析程序執(zhí)行信息或排查程序異常問(wèn)題時(shí),非常有幫助。
7. 參數(shù) handler 拒絕處理策略:
線(xiàn)程池拒絕處理任務(wù)有一下兩者情況:
①. 當(dāng)線(xiàn)程池中的線(xiàn)程數(shù)達(dá)到核心池大小時(shí),并且任務(wù)隊(duì)列已滿(mǎn),會(huì)使用拒絕處理策略;(此種情況就像工作臺(tái)上的工作量積累已滿(mǎn),又沒(méi)有足夠的人員去處理,那么我們就可以拒絕處理新任務(wù)。)
②. 當(dāng)調(diào)用shutdown() 方法后,會(huì)等待線(xiàn)程池中正在執(zhí)行的任務(wù)執(zhí)行完畢,然后再關(guān)閉線(xiàn)程池,如果在調(diào)用 shutdown() 方法后(還未真正關(guān)閉時(shí)),緊接著又有新的任務(wù)提交時(shí),會(huì)使用拒絕處理策略。(此種情況就像工作到了下班時(shí)間,工作人員還在忙著手頭上剩余的工作,如果此時(shí)又新任務(wù)提交,那么我們就可以拒絕處理新任務(wù)。)
(當(dāng)然也可以不拒絕)
拒絕處理策略:
新聞名稱(chēng):深入理解Java多線(xiàn)程與并發(fā)框(第?篇)——線(xiàn)程池參數(shù)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://vcdvsql.cn/article24/jjsce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、微信公眾號(hào)、網(wǎng)站收錄、網(wǎng)站排名、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容