CompletableFuturewhenComplete()和thenApply()/thenAccept()区别

Posted july-sunny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CompletableFuturewhenComplete()和thenApply()/thenAccept()区别相关的知识,希望对你有一定的参考价值。

CompletableFuture中whenComplete()和thenApply()/thenAccept()区别

1.whenComplete()不使用ForkJoinPool中的线程,而是使用当前的主线程
  DEMO:
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
                    //使用ForkJoinPool线程
                    System.out.println("F1  "+Thread.currentThread().getName());
                    return "F1";
                }
        );

        //主线程
        System.out.println(Thread.currentThread().getName());
        CompletableFuture<String> future2 = future.whenComplete((s, throwable) -> {
            System.out.println(s);
            System.out.println(throwable);
            //使用主线程
            System.out.println("F2  "+Thread.currentThread().getName());
        });


        future2.join();
        System.out.println(future2.get());

  输出结果

main
F1  ForkJoinPool.commonPool-worker-1
F1
null
F2  main
F1

 

2.thenApply()/thenAccept()使用ForkJoinPool中的线程
  DEMO
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
                    //使用ForkJoinPool线程
                    System.out.println("F1  " + Thread.currentThread().getName());
                    return "F1";
                }
        ).thenApply(s -> {
                    //使用ForkJoinPool线程
            System.out.println("F2  " + Thread.currentThread().getName());
            return "F2";
        });
        
        future2.join();
        System.out.println(future2.get());

  输出:

F1  ForkJoinPool.commonPool-worker-1
F2  ForkJoinPool.commonPool-worker-1
F2

 

以上是关于CompletableFuturewhenComplete()和thenApply()/thenAccept()区别的主要内容,如果未能解决你的问题,请参考以下文章