public static ThreadPoolExecutor executor=new ThreadPoolExecutor(5,5,5L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new ThreadPoolExecutor.CallerRunsPolicy()); public static void main(String[] args) throws Exception { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { log.info(">>>>>>>>>>>先执行这个 并且设置返回值"); return 10/2; }, executor); CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { log.info(">>>>>>>>>>>这个没有返回值的"); }, executor); CompletableFuture<Void> future2 = future.thenAcceptAsync((res) -> { log.info(">>>>>>>>>>>这个是在future执行完后执行这个, res 就是 future 执行的结果:{}", res); log.info(">>>>>>>>>>>这个没有返回值"); },executor); CompletableFuture<String> future3 = future.thenApplyAsync((res) -> { log.info(">>>>>>>>>>>> 这个也是在future 执行完后执行,res也是future 执行的结果:{} ",res); log.info(">>>>>>>>>>这个是可以有返回值的"); return "1"; },executor); //等待所有任务执行完成 因为future2 是在future 完成之后执行的 所以这个 future 没必要放进去 CompletableFuture.allOf(future1,future2,future3).get(); //只要有一个完成就可以 // CompletableFuture.anyOf(future1,future2,future3).get(); System.out.println(future3.get()); }
标签:info,异步,log,demo,executor,future,CompletableFuture,res From: https://www.cnblogs.com/pxblog/p/18371490