在Java中捕获Exception的并发排序任务执行程序

时间:2016-08-29 16:38:43

标签: java multithreading concurrency

给定N个Ni元素列表,我需要为每个元素调用一个给定的方法:

process(element);

按顺序处理每个列表的所有Ni元素,一旦完成,我必须知道哪些元素已被处理,哪些已抛出异常。

是否有任何已经实现的执行程序可以获取任务列表,将按顺序处理它们并跟踪故障?

1 个答案:

答案 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);
        }
    });
}