处理 Java 执行器服务任务中的异常
2022-08-31 05:47:25
我正在尝试使用Java的类来运行具有固定线程数量的大量重型任务。每个任务都有许多位置,在此期间,它可能会由于异常而失败。ThreadPoolExecutor
我已经子类化并且我已经覆盖了应该提供在运行任务时遇到的任何未捕获异常的方法。但是,我似乎无法使其工作。ThreadPoolExecutor
afterExecute
例如:
public class ThreadPoolErrors extends ThreadPoolExecutor {
public ThreadPoolErrors() {
super( 1, // core threads
1, // max threads
1, // timeout
TimeUnit.MINUTES, // timeout units
new LinkedBlockingQueue<Runnable>() // work queue
);
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if(t != null) {
System.out.println("Got an error: " + t);
} else {
System.out.println("Everything's fine--situation normal!");
}
}
public static void main( String [] args) {
ThreadPoolErrors threadPool = new ThreadPoolErrors();
threadPool.submit(
new Runnable() {
public void run() {
throw new RuntimeException("Ouch! Got an error.");
}
}
);
threadPool.shutdown();
}
}
此程序的输出是“一切都很好 - 情况正常!”,即使提交到线程池的唯一 Runnable 会引发异常。有什么线索可以说明这里发生了什么吗?
谢谢!