CompletableFuture thenApply работает в отдельном потоке, а не в потоке вызывающего абонента?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 CompletableFuture thenApply работает в отдельном потоке, а не в потоке вызывающего абонента?

Сообщение Anonymous »

Когда я выполняю метод thenApply CompletableFuture, выполнение этого метода происходит в потоке ForkJoinPool, а не в вызывающем (основном) потоке. Почему это так? Такое поведение при использовании пула объединения ветвей вместо вызывающего потока похоже на использование thenApplyAsync, поэтому я хочу понять причину такого поведения thenApply

Код: Выделить всё

        System.out.println("hello world, CompletableFuturesRightHere");
System.out.println("log1: " + Thread.currentThread().getName());

CompletableFuture cf = CompletableFuture.supplyAsync(() -> {
System.out.println("log-sA: " + Thread.currentThread().getName());
return 40;
}).thenApply( a ->  {
System.out.println("log-tA: " + Thread.currentThread().getName());
return a + 40;
});

System.out.println("log3: " + Thread.currentThread().getName());
System.out.println("cf result: " + cf.get());
ниже приведен вывод приведенного выше кода:

Код: Выделить всё

hello world, CompletableFuturesRightHere
log1: main
log-sA: ForkJoinPool.commonPool-worker-3
log3: main
log-tA: ForkJoinPool.commonPool-worker-3
cf result: 80
Когда я запускаю тот же код в jdoodle, поведение соответствует ожиданиям.

Подробнее здесь: https://stackoverflow.com/questions/757 ... ler-thread
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»