ConcurrentModificationException при доступе к списку будущих служб Executor. - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь делать параллельные запросы, используя службу executor. После его завершения я получаю доступ к Future с помощью приведенного ниже кода на Java 7. Все, что я пытаюсь - это сохранить его в новом списке под названием 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 Ответ

1 голос
/ 24 мая 2019

Ваш список имеет тип Future<Infos> в расширенном цикле for, вы используете Info.

 for(Future<Info> fut : list)

Ваш код должен быть:

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