package java8.completableFuture;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @program: javaCodeThink
* @description:
* @author: fbl
* @create: 2020-11-10 10:18
**/
public class FutureLearn {
public static void main(String[] args) throws InterruptedException, ExecutionException {
CompletableFuture<String> futureData = getFutureData();
CompletableFuture<String> futureData2 = getFutureData2();
Thread.sleep(1);
// get()方法会抛异常 join()不会
String s1 = futureData.get();
String s = futureData.join();
String join = futureData2.join();
System.out.println(join);
}
/**
工厂模式
*/
private static CompletableFuture<String> getFutureData() {
// 定制执行器,如果没有第二个参数,CompletableFuture默认使用Runtime.getRuntime.availableProcessors()的返回值使用固定数目的线程
ExecutorService executorService = Executors.newFixedThreadPool(1);
return CompletableFuture.supplyAsync(() -> "远程调用结果",executorService);
}
/**
非工厂模式
*/
private static CompletableFuture<String> getFutureData2(){
CompletableFuture completableFuture = new CompletableFuture();
new Thread(() ->{
try {
//TODO 远程调用代码
completableFuture.complete("远程调用结果");
}catch (Exception e){
// 另一个线程抛出的异常我们也可以捕获到,方便调试
completableFuture.completeExceptionally(e);
}
}).start();
return completableFuture;
}
}
CompletableFuture异步请求远程资源
最新推荐文章于 2025-02-04 11:30:00 发布