Задать вопрос
@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 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
В таком виде это всё вообще бесполезно. Создание треда - это дорогая операция.
Для того, чтобы это работало, надо создавать executor один раз, и сабмиттить в него разные задачи. После цикла дожидаться их. Соответственно, тело цикла не должно зависеть от результата выполнения таски.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы