MST

星途 面试题库

面试题:Java中线程池常见哪些异常类型以及如何初步感知这些异常

在Java线程池中,列举出至少两种常见的异常类型,并简要说明在代码层面如何初步感知这些异常的发生。
36.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 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();
}
  1. 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();