CompletableFuture 异步编程
文章目录
一、Future
Futrue接口是Java5引入。Future 的get方法会阻塞,直至得到一个返回结果。
1.1 get方法和join方法
get方法和join方法功效一样,差异在:future.get()
方法会抛出受检异常,future.join()
方不会抛出受检异常;
ExecutorService executorService = Executors.newCachedThreadPool();
Future<Double> future = executorService.submit(new Callable<Double>() {
@Override
public Double call() throws Exception {
return createValue();
}
});
doSomthing();
try {
// 阻塞,直至得到返回结果
Double v = future.get();
System.out.println(v);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
二、CompletableFuture
CompletableFuture是Future的实现,Java8中引入。
2.1 入门示例
(1)示例一
这种情况下,发生错误。如果在外面调用futer.get()
将一直阻塞
public Future<Double> getPriceSync(String product) {
CompletableFuture<Double> future = new CompletableFuture<