【发布时间】:2015-11-29 13:49:36
【问题描述】:
我遇到了如下情况。
主类
event.addListener(Event e){
if (e == EXPECTED_EVENT)
Future<?> result = executorService.submit(myTask);
}
}
doSomething()
doSomethingElse()
doMoreStuff()
如果其中一项任务失败,有什么方法可以中断主流程?
我不知道在哪里以及如何精确同步 Exception 部分:
try {
Object result = ((Future<?>) expectedFutureTask).get();
}
catch (InterruptedException e ) { /* Task was interupted/stopped */}
catch (CancellationException e) { /* Task was cancelled */}
catch (ExecutionException e) { //Task threw an Exception
throw e.getCause();
}
有什么简洁的设计可以满足这个需求吗?
【问题讨论】:
-
有点不清楚是什么问题。您要解决的具体问题是什么?
-
我放了一个主类,它通过监听器将任务提交给 executionService。然后我问“如果其中一个任务失败,有什么方法可以中断主流程?”。我以为说的很清楚了,还有什么不明白的?
-
您显示的代码中断了主要流程。这就是你现在想要的吗?没有任何神奇的方法可以让代码继续它的业务,但突然抛出一个 InterrruptedByFailingChildTaskException 然后进入一个异常处理程序。您的主代码需要检查(不时/不断地)是否满足需要采取行动的条件。您可以创建一个调用父线程的
Thread.interrupt()方法的执行程序(或可监听的future),但问题仍然存在,您需要做一些检查中断条件的事情。 -
谢谢,我就是这么问的!
标签: multithreading concurrency architecture java-8 java.util.concurrent