2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁常見問題正文

線程池的關閉方式有幾種,各自的區別是什么?

更新時間:2023-06-19 來源:黑馬程序員 瀏覽量:

IT培訓班

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

  1.'shutdown()'方法:

  ·該方法會平滑地關閉線程池,不再接受新的任務提交。

  ·它會等待所有已提交的任務執行完畢,包括已經在等待隊列中的任務。

  ·如果線程池已經關閉,則調用該方法沒有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執行任務...

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

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

  2.'shutdownNow()'方法:

  ·該方法會強制關閉線程池,嘗試中斷正在執行的任務,并返回等待執行的任務列表。

  ·它會立即停止線程池的運行,不再處理等待隊列中的任務。

  ·如果線程池已經關閉,則調用該方法沒有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執行任務...

List<Runnable> unprocessedTasks = executor.shutdownNow(); // 強制關閉線程池

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

  3.'awaitTermination()'方法:

  ·該方法用于等待線程池中的任務執行完畢,或者在指定的時間內等待任務執行完畢。

  ·它會阻塞當前線程,直到滿足以下條件之一:所有任務執行完畢、超過指定的等待時間、當前線程被中斷。

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

ExecutorService executor = Executors.newFixedThreadPool(5);

// 執行任務...

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

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


分享到:
在線咨詢 我要報名
和我們在線交談!