0
鉴于镍元素氮名单并行排序的任务执行者,我需要调用每个元素给定的方法:在Java中捕获异常
process(element);
处理每个列表中的所有镍元素的秩序,一旦完成后,我必须知道哪些元素已处理,哪些已抛出异常。
是否有任何已执行的执行程序可以获取任务列表,将按顺序处理它们并记录故障?
鉴于镍元素氮名单并行排序的任务执行者,我需要调用每个元素给定的方法:在Java中捕获异常
process(element);
处理每个列表中的所有镍元素的秩序,一旦完成后,我必须知道哪些元素已处理,哪些已抛出异常。
是否有任何已执行的执行程序可以获取任务列表,将按顺序处理它们并记录故障?
简短的回答是否定的。
龙答:没有,因为它在不到20行代码轻松实现:
public static void main(String[] args) {
List<Integer> elements = Arrays.asList(1, 2, 3, 5, 8, 13);
ExecutorService executor = Executors.newSingleThreadExecutor();
List<Future<Integer>> results = elements.stream().map((e) -> {
return executor.submit(() -> {
// Fail for even numbers
if (e % 2 == 0) {
throw new RuntimeException();
}
return e;
});
}).collect(Collectors.toList());
results.forEach((e) -> {
try {
System.out.println(e.get());
} catch (InterruptedException | ExecutionException e1) {
System.out.println(false);
}
});
}
将输出:
1
false
3
5
false
13
尽管这不是你在寻找什么,但你可以查看ExecutorService的invokeAll()方法。 –
*'为了'*是什么意思?是否有可能开始处理新的列表,而前一个尚未完全处理?如果以前的项目尚未处理,是否有可能开始处理列表的新项目? –