首頁(yè)常見問題正文

線程池的關(guān)閉方式有幾種,各自的區(qū)別是什么?

更新時(shí)間:2023-06-19 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Java中,線程池的關(guān)閉方式有三種:shutdown()、shutdownNow()和awaitTermination()。

  1.'shutdown()'方法:

  ·該方法會(huì)平滑地關(guān)閉線程池,不再接受新的任務(wù)提交。

  ·它會(huì)等待所有已提交的任務(wù)執(zhí)行完畢,包括已經(jīng)在等待隊(duì)列中的任務(wù)。

  ·如果線程池已經(jīng)關(guān)閉,則調(diào)用該方法沒有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執(zhí)行任務(wù)...

executor.shutdown(); // 關(guān)閉線程池

// 等待線程池中的任務(wù)執(zhí)行完畢
try {
    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
    // 處理中斷異常
}

  2.'shutdownNow()'方法:

  ·該方法會(huì)強(qiáng)制關(guān)閉線程池,嘗試中斷正在執(zhí)行的任務(wù),并返回等待執(zhí)行的任務(wù)列表。

  ·它會(huì)立即停止線程池的運(yùn)行,不再處理等待隊(duì)列中的任務(wù)。

  ·如果線程池已經(jīng)關(guān)閉,則調(diào)用該方法沒有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執(zhí)行任務(wù)...

List<Runnable> unprocessedTasks = executor.shutdownNow(); // 強(qiáng)制關(guān)閉線程池

// 處理未執(zhí)行的任務(wù)
for (Runnable task : unprocessedTasks) {
    // 處理未執(zhí)行的任務(wù)...
}

  3.'awaitTermination()'方法:

  ·該方法用于等待線程池中的任務(wù)執(zhí)行完畢,或者在指定的時(shí)間內(nèi)等待任務(wù)執(zhí)行完畢。

  ·它會(huì)阻塞當(dāng)前線程,直到滿足以下條件之一:所有任務(wù)執(zhí)行完畢、超過(guò)指定的等待時(shí)間、當(dāng)前線程被中斷。

  這些關(guān)閉方式可以根據(jù)具體需求選擇合適的方法,shutdown()和awaitTermination()提供了一種平滑關(guān)閉線程池的方式,而shutdownNow()則提供了一種立即停止線程池的方式。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執(zhí)行任務(wù)...

executor.shutdown(); // 關(guān)閉線程池

// 等待線程池中的任務(wù)執(zhí)行完畢,最多等待1小時(shí)
try {
    if (!executor.awaitTermination(1, TimeUnit.HOURS)) {
        // 執(zhí)行超時(shí)處理
    }
} catch (InterruptedException e) {
    // 處理中斷異常
}


分享到:

Java培訓(xùn)班課程javaee

Python培訓(xùn)機(jī)構(gòu)python大數(shù)據(jù)

web前端培訓(xùn)課程升級(jí)V8.5web

AI+設(shè)計(jì)培訓(xùn)課程ui

大數(shù)據(jù)培訓(xùn)課程cloud

軟件測(cè)試培訓(xùn)課程test

c

新媒體運(yùn)營(yíng)培訓(xùn)netmarket

產(chǎn)品經(jīng)理培訓(xùn)課程pm

linux培訓(xùn)Linux

movies

智能機(jī)器人培訓(xùn)robot

電商視覺設(shè)計(jì)課程uids

AI

集成電路應(yīng)用開發(fā)(嵌入式)培訓(xùn)課程jdbc

在線咨詢 我要報(bào)名
和我們?cè)诰€交談!