@gibsonen

Как правильно сформировать многопоточность?

Подскажите, пожалуйста, как лучше сделать в моем случае. Хочу распараллелить задачи, но получается только с 1 потоком. Постоянно нужно ждать когда получу результат d (future.get()). А можно как-то сделать так, чтобы поток который ждет результат оставался ждать, а другой поток продолжал дальше по циклу выполнять свою работу?

List<Integer> index = new ArrayList<>();
        ///....///
        List<List<Integer>> dis = new ArrayList<>();
        for (int i = 0; i < links.size() - 1; i++) {
            if (index.get(i) == 0) {
                ..////...
                List<Integer> list = new ArrayList<>();
                for (int j = i + 1; j < links.size(); j++) {

                        URL oneURL = new URL(links.get(i));           
                        URL twoURL = new URL(links.get(j));
                        Task task = new Task(oneURL, twoURL);
                        ExecutorService executor = Executors.newFixedThreadPool(1);
                        Future<Double> future = executor.submit(task);
                        Double d = future.get();
                        executor.shutdown();
                        if (d > k) {
                            list.add(j);
                            index.set(j, 1);
                        }
                }
                dis.add(list);
            }
        }
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
В таком виде это всё вообще бесполезно. Создание треда - это дорогая операция.
Для того, чтобы это работало, надо создавать executor один раз, и сабмиттить в него разные задачи. После цикла дожидаться их. Соответственно, тело цикла не должно зависеть от результата выполнения таски.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект