CompletableFuture常用方法
Posted moris5013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CompletableFuture常用方法相关的知识,希望对你有一定的参考价值。
public class CompletableFutureTest { public static void main(String[] args) throws Exception { test5(); } /** * whenCompleteAsync指的是异步执行传入的BiConsumer * whenComplete 指的是同步执行传入的BiConsumer */ public static void test1() throws ExecutionException, InterruptedException { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello"); //future.whenCompleteAsync((v, r) -> { future.whenComplete((v, r) -> { System.out.println("========="); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("====over====="); }); System.out.println("^^^^^^^^^^"); System.out.println(future.get()); Thread.currentThread().join(); } /** * 同样有异步和同步两种方法,thenApply没有异常处理 * @throws ExecutionException * @throws InterruptedException */ public static void test2() throws ExecutionException, InterruptedException { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> "hello") .thenApply((s) -> { try { System.out.println("=========="); TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("====over====="); return s.length(); }); // .thenApplyAsync((s) -> { // try { // System.out.println("=========="); // TimeUnit.SECONDS.sleep(5); // } catch (InterruptedException e) { // e.printStackTrace(); // } // System.out.println("====over====="); // return s.length(); // }); System.out.println("^^^^^^^^^^"); System.out.println(future.get()); Thread.currentThread().join(); } /** * handleAsync 有异常处理 * @throws ExecutionException * @throws InterruptedException */ public static void test3() throws ExecutionException, InterruptedException { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> "hello") .handleAsync((v, t) -> { return v.length(); }); System.out.println(future.get()); } /** * thenAcceptAsync 直接将上一个的结果进行消费 * @throws ExecutionException * @throws InterruptedException */ public static void test4() throws ExecutionException, InterruptedException { CompletableFuture.supplyAsync(() -> "hello") .thenAcceptAsync((x) -> { System.out.println(x); }); } /** *执行完上一个future后再执行一个runnable * @throws ExecutionException * @throws InterruptedException */ public static void test5() throws ExecutionException, InterruptedException { CompletableFuture.supplyAsync(() -> "hello") .thenRunAsync(() -> { System.out.println("====over==="); }); } }
以上是关于CompletableFuture常用方法的主要内容,如果未能解决你的问题,请参考以下文章
CompletableFuture异步编排(线程串行化代码示例)
CompletableFuture异步编排(线程串行化代码示例)
CompletableFuture异步编排(计算完成回调代码示例)