我们如何处理主线程中ThreadPoolTaskExecutor启动的线程生成的异常?
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ThreadPoolTaskExecutor executer = (ThreadPoolTaskExecutor)context.getBean("taskExecutor_test");
for(int i=0; i<5; i++){
executer.execute(new RunnableImpl()); //If any of the thread create exception
}
//need to catch the exceptions here.
}
[就像我们使用&#39; setUncaughtExceptionHandler&#39;在正常的线程]
答案 0 :(得分:2)
向ThreadPoolTaskExecutor
提交任务时,您希望异步运行这些任务,因此您的代码可以catch
处理异常,除非您阻止并等待它们发生。
要执行此操作,请使用返回Future
的{{3}}。然后,您可以调用ThreadPoolTaskExecutor#submit(Runnable)
来阻止当前线程,并等待任务完成或抛出异常(完成(失败)任务)。如果它是一个长时间运行的任务,您还可以使用Future#isDone()
或重载的get(..)
方法轮询其完成情况。