Несколько нитей для цикла - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть метод, который мне нужно вызвать для каждого элемента в списке, а затем вернуть этот список вызывающей стороне в другом классе. Я хочу создать тему для каждого элемента, но пытаюсь понять, как это сделать.

public List<MyList> threaded(List<Another> another) {
    List<MyList> myList= new ArrayList<>();
    Visibility visi = new Visibility();

    Thread[] threads = new Thread[another.size()];
    for (int i = 0; i < another.size(); i++) {
        visi = test(another.get(i));
        myList.add(visi);
    }
    return myList;
}

Итак, я определил массив потоков, который соответствует количеству элементов в списке another. Чтобы использовать каждый из этих потоков в цикле, а затем вернуть myList после того, как все потоки были выполнены, я потерян.

1 Ответ

0 голосов
/ 06 сентября 2018

Это выглядит как идеальный вариант использования Stream.parallelStream ()

public List<MyList> threaded(List<Another> another) {
    return another.parallelStream()
                  .map(a -> test(a));
                  .collect(Collectors.toList());
}

Это вызовет test для каждого Another и соберет результаты в виде Списка, используя столько процессоров, сколько у вас имеется (вплоть до количества имеющихся у вас объектов)

Да, вы можете создать поток для каждого, за исключением того, что он будет менее эффективным и намного более сложным.

...