访问执行程序服务将来列表时发生ConcurrentModificationException

时间:2019-05-24 18:44:18

标签: java collections concurrentmodification

我正在尝试使用执行程序服务进行并行请求。完成后,我将使用Java 7中的以下代码访问Future。我所要做的就是将其存储在名为infos的新列表中。我看到ConcurrentModificationException异常。关于如何摆脱它的任何建议?

        List<Info> infos = new ArrayList<>();
        for(Future<Info> fut : list){
            try {
                infos.add(fut.get()); // ConcurrentModificationException happening here...
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
        // send infos

更新-

private List<Future<Info>> list;

    Future<Info> future = executor.submit(callable);
    list.add(future);

1 个答案:

答案 0 :(得分:1)

您的列表的类型为Future<Infos>,而在增强的for循环中,您正在使用信息。

 for(Future<Info> fut : list)

您的代码应为:

    private List<Future<Info>> list = new ArrayList<>();
    Future<Info> future = executor.submit(callable);
    list.add(future);