package com.alatus.search; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CompletableFutureTest { public static ExecutorService service = Executors.newFixedThreadPool(10); public static void main(String[] args) throws InterruptedException, ExecutionException { // CompletableFuture会启动一个异步任务,当它用的是supplyAsync的时候,是可以返回值的 // 我们可以和FutureTask一样通过get来获取这个值 CompletableFuture.runAsync(() -> { System.out.println("异步任务"); },service); // CompletableFuture<Long> longCompletableFuture = CompletableFuture.supplyAsync(() -> { // long id = Thread.currentThread().getId(); // System.out.println(id); // int i = 10 / 0; // return id; // }, service).whenComplete((result,exception)->{ 可以对结果进行获取和异步编排,并输出存在或出现的异常 但是没法修改返回数据 // System.out.println("结果是:"+result+"异常是:"+exception); // }).exceptionally(throwable -> { 出现异常的默认返回 可以修改返回数据 // return 10L; // }); CompletableFuture<Long> longCompletableFuture = CompletableFuture.supplyAsync(() -> { long id = Thread.currentThread().getId(); System.out.println(id); int i = 10 / 4; return id; }, service).handle((result,exception)->{ // 方法完成后的处理,无论是成功完成还是失败完成 if(result!=null){ return result; } if(exception!=null){ System.out.println(exception); return 0L; } return 0L; }); Long l = longCompletableFuture.get(); System.out.println(l); System.out.println("我是main方法"); } }
package com.alatus.search; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CompletableFutureTest { public static ExecutorService service = Executors.newFixedThreadPool(10); public static void main(String[] args) throws InterruptedException, ExecutionException { // CompletableFuture会启动一个异步任务,当它用的是supplyAsync的时候,是可以返回值的 // 我们可以和FutureTask一样通过get来获取这个值 CompletableFuture.runAsync(() -> { System.out.println("异步任务"); },service); // CompletableFuture<Long> longCompletableFuture = CompletableFuture.supplyAsync(() -> { // long id = Thread.currentThread().getId(); // System.out.println(id); // int i = 10 / 0; // return id; // }, service).whenComplete((result,exception)->{ 可以对结果进行获取和异步编排,并输出存在或出现的异常 但是没法修改返回数据 // System.out.println("结果是:"+result+"异常是:"+exception); // }).exceptionally(throwable -> { 出现异常的默认返回 可以修改返回数据 // return 10L; // }); CompletableFuture<Long> longCompletableFuture = CompletableFuture.supplyAsync(() -> { long id = Thread.currentThread().getId(); System.out.println(id); int i = 10 / 4; return id; }, service).handle((result,exception)->{ // 方法完成后的处理,无论是成功完成还是失败完成 if(result!=null){ return result; } if(exception!=null){ System.out.println(exception); return 0L; } return 0L; }); Long l = longCompletableFuture.get(); System.out.println(l); System.out.println("我是main方法"); } }
10-13
3938
08-24
1913
09-03
1514
08-20
411