在Java開發(fā)中,線程池的使用必不可少,使用無返回值 ? execute()??方法時,線程執(zhí)行發(fā)生異常的話,需要記錄日志,方便回溯,一般做法是在線程執(zhí)行方法內(nèi) try/catch 處理,如下:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、南澗網(wǎng)站維護、網(wǎng)站推廣。@Test
public void test() throws Exception {
ThreadPoolExecutor threadPoolExecutor =
new ThreadPoolExecutor(5, 10, 60,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(100000));
Futuresubmit = threadPoolExecutor.execute(() ->{
try {
int i = 1 / 0;
return i;
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
});
}
但是當(dāng)線程池調(diào)用方法很多時,那么每個線程執(zhí)行方法內(nèi)都要?try/catch
處理,這就不優(yōu)雅了,其實ThreadPoolExecutor
類還支持傳入?ThreadFactory
參數(shù),自定義線程工廠,在創(chuàng)建?thread
時,指定?setUncaughtExceptionHandler
異常處理方法,這樣就可以做到全局處理異常了,代碼如下:
ThreadFactory threadFactory = r ->{
Thread thread = new Thread(r);
thread.setUncaughtExceptionHandler((t, e) ->{
// 記錄線程異常
log.error(e.getMessage(), e);
});
return thread;
};
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 60,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(100000),
threadFactory);
threadPoolExecutor.execute(() ->{
log.info("---------------------");
int i = 1 / 0;
});
線程池決絕策略設(shè)置錯誤導(dǎo)致業(yè)務(wù)接口執(zhí)行超時先介紹下線程池得四種決絕策略
如下是一個線上業(yè)務(wù)接口使用得線程池配置,決絕策略采用?CallerRunsPolicy
// 某個線上線程池配置如下
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
50, // 最小核心線程數(shù)
50, // 大線程數(shù),當(dāng)隊列滿時,能創(chuàng)建的大線程數(shù)
60L, TimeUnit.SECONDS, // 空閑線程超過核心線程時,回收該線程的大等待時間
new LinkedBlockingQueue<>(5000), // 阻塞隊列大小,當(dāng)核心線程使用滿時,新的線程會放進隊列
new CustomizableThreadFactory("task"), // 自定義線程名
new ThreadPoolExecutor.CallerRunsPolicy() // 線程執(zhí)行的拒絕策略
);
在某些情況下,子線程任務(wù)調(diào)用第三方接口超時,導(dǎo)致核心線程數(shù)、大線程數(shù)占滿、阻塞隊列占滿的情況下執(zhí)行拒絕策略時,由于使用?CallerRunsPolicy
策略,導(dǎo)致業(yè)務(wù)線程執(zhí)行子任務(wù)時繼續(xù)超時,進而導(dǎo)致接口執(zhí)行異常,這種情況下,考慮到子線程任務(wù)得重要性,不是很重要得話,可以使用?DiscardPolicy
策略,要是很重要,可以發(fā)送到消息隊列中持久化子線程任務(wù)數(shù)據(jù)待后續(xù)處理
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧