java8 CompletableFuture 异步

异步调用

也就是我们的代码执行虽然整体上看是依次执行的,但是执行的过程中,我们并不会因为前面的代码没有执行完,而不执行。

同步调用会阻塞线程
在程序执行之前需要等待同步方法执行完毕返回结果
异步调用则在调用之后立即返回以便程序被调用方法完成其它任务同时执行其他操作


异步编程
同步编程每个线程同时只能发一个请求并同步等待返回 引入多线程实现并行化处理
多线程下对共享资源的访问 引入资源争用和并发 比如发起网络IO 调用线程会处于同步阻塞等待响应的状态
编写异步的代码 可以使用相同的底层资源,将执行切换到另一个活动任务,

场景
比如异步打印日志 异步IO请求

开启线程

使用Future 获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,主线程都会被迫等待。
使用Future确实可以获取异步任务的执行结果,但是获取其结果还是会阻塞调用线程的,并没有实现完全异步化处理,
在JDK8中提供了CompletableFuture来弥补了其缺点。

异步任务结束时,会自动回调某个对象的方法
异步任务出错时,会自动回调某个对象的方法
主线程设置好回调后,不再关心异步任务的执行
多个completableFuture 可以串行执行,还可以并行执行

CompleteFuture 可以指定异步处理流程
thenAccept() 处理正常结果
exceptional() 处理异常结果
thenApplyAsync() 用于串行化另一个CompletableFuture
anOf() allOf() 用于并行化多个CompletableFuture

https://www.jianshu.com/p/6bac52527ca4

原文地址:https://www.cnblogs.com/yxj808/p/14817444.html