java 子进程返回_java – 只要一个子线程抛出异常,就返回主线程

您可以使用更复杂的同步机制,如锁存器,障碍或信号量,但请查看

ExecutorCompletionService.它是一个围绕ExecutorService的轻量级包装器,允许您侦听第一个完成的任务.这是一个简单的例子:

final ExecutorService executorService = Executors.newCachedThreadPool();

final ExecutorCompletionService completionService =

new ExecutorCompletionService(executorService);

for (int i = 0; i < 10; ++i) {

completionService.submit(new Task());

}

completionService.take().get();

代码非常简单.首先使用completionService包装executorService.之后你用它来一个接一个地提交任务.最后一行至关重要.它完成第一个任务并尝试检索结果.如果它抛出异常,它将在此处重新抛出,包含ExecutionException:

try {

completionService.take().get();

} catch (ExecutionException e) {

e.getCause(); //this was thrown from task!

}

在catch块中你可以以某种方式处理异常,例如取消剩余的任务或关闭整个线程池.

当然,您可以通过调用take()十次来等待所有任务完成.只要至少完成一项任务,每次调用都将被阻止.

你可能感兴趣的:(java,子进程返回)