Влияние на производительность при использовании методов thenXXXX и thenXXXXAsyn c в CompletableFuture - PullRequest
1 голос
/ 21 апреля 2020

У меня есть вопрос об использовании метода thenXXXX и thenXXXXAsyn c класса JDK 8 CompletableFuture. В соответствии с моим пониманием thenApply будет использовать тот же поток, что и ранее выполненные будущие, а thenApplyAsyn c использует любой поток из пула.

Code_1:

CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> tcf.task("FIRST"), executors)
        .thenApply(a -> {
                logger.log(Level.INFO, "Thread Id - 1 " + Thread.currentThread().getName());
                ////Some operations
         })
        .thenApply(a -> {
                logger.log(Level.INFO, "Thread Id - 2 " + Thread.currentThread().getName());
                ////Some operations
         });

Выход:
Идентификатор потока - 1: pool-1-thread-1

Идентификатор потока - 2: pool-1-thread-1

Код_2:

CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> tcf.task("FIRST"), executors)
        .thenApplyAsync(a -> {
                logger.log(Level.INFO, "Thread Id - 1 " + Thread.currentThread().getName());
                ////Some operations
         }, executors)
        .thenApplyAsync(a -> {
                logger.log(Level.INFO, "Thread Id - 2 " + Thread.currentThread().getName());
                ////Some operations
         }, executors);

Вывод:
Идентификатор потока - 1: pool-1-thread-2

Идентификатор потока - 2: pool-1-thread- 3

Какой наилучший подход использовать? В Code_2 задача перемещается из одного потока в другой. Влияет ли это на производительность?

спасибо

...