- RejectedExecutionException
- 异常说明:当线程池已经关闭,或者线程池已经饱和(达到最大线程数且任务队列已满),再提交新任务时会抛出该异常。
- 代码感知:在调用
ExecutorService.submit()
或 ExecutorService.execute()
方法提交任务时,若捕获到 RejectedExecutionException
,即表明发生了此类异常。例如:
ExecutorService executorService = Executors.newFixedThreadPool(2);
try {
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
// 线程执行的任务
});
}
} catch (RejectedExecutionException e) {
// 处理异常
e.printStackTrace();
} finally {
executorService.shutdown();
}
- InterruptedException
- 异常说明:当正在执行的线程被中断时抛出。在Java线程池中,如果线程在等待任务、执行任务过程中被中断,就会抛出该异常。
- 代码感知:通常在任务的执行逻辑中,如果当前线程调用了
Thread.sleep()
、Object.wait()
等可中断的方法,并且线程被中断,这些方法会抛出 InterruptedException
。在任务的 run()
方法中捕获该异常即可感知。例如:
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// 处理异常
e.printStackTrace();
}
});
executorService.shutdown();