死你threadpoolexecutor

时间:2009-04-22 21:30:22

标签: java concurrency

我有一个java.util.concurrent.Execution服务 - 单线程线程池执行器。我向它提交了某些任务。如果任务抛出未经检查的异常,则线程将死亡但服务确保生成新线程并在其中执行后续任务。但是我不想要这个功能,仍然想使用threadPoolExecutor。即如果任务抛出未经检查的异常,我希望服务为shutDownNow()。

实现这一目标的最佳方法是什么?使用自定义线程工厂来限制产生的线程数是否合理?

2 个答案:

答案 0 :(得分:3)

您可以创建ThreadPoolExecutor子类并覆盖afterExecute方法。该方法有一个throwable参数,如果有异常,该参数将为非null。

答案 1 :(得分:2)

您可以将threadPoolExecutor包裹在ExecutorCompletionService中。然后继续take(),检索Future。如果future.get()引发Exception,请致电threadpoolexecutor.shutdown()