我试图使用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() // 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抛出异常。任何线索,这里发生了什么?
谢谢!