在Java中,ThreadPoolExecutor
類本身并不直接處理異常。當你在ThreadPoolExecutor
中執行任務時,如果任務拋出異常,那么這個異常將被傳遞給Future.get()
方法,當調用這個方法時,它會拋出ExecutionException
。要處理這個異常,你需要捕獲并處理它。
以下是一個簡單的示例,展示了如何在ThreadPoolExecutor
中處理異常:
import java.util.concurrent.*;
public class ThreadPoolExecutorExample {
public static void main(String[] args) {
int corePoolSize = 2;
int maximumPoolSize = 4;
long keepAliveTime = 60L;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(10);
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
for (int i = 0; i < 10; i++) {
int finalI = i;
executor.submit(() -> {
try {
System.out.println("Executing task " + finalI);
if (finalI == 5) {
throw new RuntimeException("Task " + finalI + " failed");
}
} catch (Exception e) {
System.out.println("Task " + finalI + " encountered an exception: " + e.getMessage());
}
});
}
executor.shutdown();
}
}
在這個示例中,我們創建了一個ThreadPoolExecutor
,并提交了10個任務。其中一個任務(任務5)會拋出一個異常。當我們調用Future.get()
方法時,它會拋出ExecutionException
,我們可以捕獲并處理這個異常。在這個例子中,我們只是打印出異常的消息。
注意,為了避免程序終止,你應該始終在可能拋出異常的代碼塊周圍使用try-catch語句,或者在調用Future.get()
時使用try-catch語句。