给定N个Ni元素列表,我需要为每个元素调用一个给定的方法:
process(element);
按顺序处理每个列表的所有Ni元素,一旦完成,我必须知道哪些元素已被处理,哪些已抛出异常。
是否有任何已经实现的执行程序可以获取任务列表,将按顺序处理它们并跟踪故障?
答案 0 :(得分:1)
简短的回答是否定的。
答案很长:不,因为它可以在不到20行的代码中轻松实现:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.30</version>
</dependency>
将输出:
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);
}
});
}