Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > .supplyAsync .thenAcceptAsync


Автор: winters 1.6.2016, 15:14
Всем привет!
Подскажите, плз.
Есть код:
Код

public static void main(String[] args)  {
        Arrays.asList("A", "B", "C", "D").forEach(e -> CompletableFuture.supplyAsync(() -> e + e).thenAcceptAsync(System.out::println));
    }

Все работает, но итогда возвращает "AA" "BB" "CC" "DD", а иногда только "DD" "BB" "AA" и т.п.
С чем это связано?

Автор: LSD 1.6.2016, 17:21
Async операции выполняются в фоне. У тебя просто завершается main() и JVM shutdow выполняется раньше чем успевают завершиться все задачи.
Код

        List<String> list = Arrays.asList("A", "B", "C", "D");
        CountDownLatch latch = new CountDownLatch(list.size());
        list.forEach(e -> CompletableFuture.supplyAsync(() -> e + e).thenAcceptAsync(s -> {
            System.out.println(s);
            latch.countDown();
        }));
        latch.await();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)