我有一个java.util.concurrent.Execution服务 - 单线程线程池执行器。我向它提交了某些任务。如果任务抛出未经检查的异常,则线程将死亡但服务确保生成新线程并在其中执行后续任务。但是我不想要这个功能,仍然想使用threadPoolExecutor。即如果任务抛出未经检查的异常,我希望服务为shutDownNow()。
实现这一目标的最佳方法是什么?使用自定义线程工厂来限制产生的线程数是否合理?
答案 0 :(得分:3)
您可以创建ThreadPoolExecutor子类并覆盖afterExecute方法。该方法有一个throwable参数,如果有异常,该参数将为非null。
答案 1 :(得分:2)
您可以将threadPoolExecutor
包裹在ExecutorCompletionService
中。然后继续take()
,检索Future
。如果future.get()
引发Exception
,请致电threadpoolexecutor.shutdown()
。