实现了Future 与 CompletionStage这两个接口
实现Future接口是为了能够得到数据 实现CompletionStage接口是为了能够流式处理 所以CompletableFuture封装了Future使其能够方法回调避免get()阻塞线程或者while()循环对CPU不好 Future判断任务是否完成就是get()或者idDone()循环不是很好,而Completablefuture可以直接方法回调与链式编程很方便
xxxAsync的是开启另一个线程来执行
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> System.out.println("runAsync"), Executors.newFixedThreadPool(4));
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "supplyAsync", Executors.newFixedThreadPool(4));
CompletableFuture.anyOf(future1, future2);
CompletableFuture.allOf(future1, future2);
future2.thenApply(s -> s + " " + "apply").thenAccept(e -> System.out.println(e)).join();