捕获主线程中工作线程创建的异常

时间:2014-08-13 10:23:39

标签: java spring exception-handling threadpoolexecutor

我们如何处理主线程中ThreadPoolTask​​Executor启动的线程生成的异常?

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;在正常的线程]

1 个答案:

答案 0 :(得分:2)

ThreadPoolTaskExecutor提交任务时,您希望异步运行这些任务,因此您的代码可以catch处理异常,除非您阻止并等待它们发生。

要执行此操作,请使用返回Future的{​​{3}}。然后,您可以调用ThreadPoolTaskExecutor#submit(Runnable)来阻止当前线程,并等待任务完成或抛出异常(完成(失败)任务)。如果它是一个长时间运行的任务,您还可以使用Future#isDone()或重载的get(..)方法轮询其完成情况。