java 如何快速实现异步调用方法
java 如何快速实现异步调用方法
什么是异步编程
在实现异步调用之前,我们先了解一下,什么是异步编程?什么场景下适用等等情况。
我们都知道,在传统的同步编程中,当一个操作开始执行时,程序会阻塞并等待该操作完成,然后才能继续执行后续代码。这种阻塞等待的方式可能会导致程序响应性能下降,因为在等待的过程中无法同时处理其他任务。这种显而易见的,在某种耗时的场景下,就显得无用了,甚至很影响体验。
如文件读写、网络请求或计算密集型任务,再如人脸融合特效等等,都是耗时的操作,这个时候,我们就需要异步编程了。
异步编程则不会阻塞程序的执行,它将耗时的操作提交给后台线程或其他执行环境,并立即返回,使得程序可以继续执行其他任务。当耗时操作完成后,会通过回调、事件或者轮询等方式通知主线程,主线程再去处理操作结果或执行相应的回调函数。
CompletableFuture
今天我们就来了解下 CompletableFuture
,它Java 8引入的一种功能强大的异步编程工具,可以用于实现复杂的异步操作和处理链式的异步任务。
从这个JDK里,可以看出,它既实现了 Future
接口,拥有 Future 所有的特性,比如可以使用 get()
方法获取返回值等。
也实现了CompletionStage
接口,提供了丰富的方法来管理异步任务的执行和处理任务结果。并且这些接口多达40多个,完全足够我们日常所使用了。
1. supplyAsync
1. CompletableFuture supplyAsync(Supplier extends T> supplier)
该方法接受一个Supplier函数式接口作为参数,用于执行一个有返回值的异步任务。返回一个CompletableFuture
对象,可以用于获取异步任务的执行结果。
参数:
Supplier
:一个无参的函数式接口,用于提供异步任务的结果。
2. runAsync
2、CompletableFuture runAsync(Runnable runnable)
该方法接受一个Runnable函数式接口作为参数,用于执行一个无返回值的异步任务。返回一个CompletableFuture
对象,可以用于等待异步任务完成。
参数:
Runnable
:一个无参的函数式接口,用于执行异步任务。
3. thenApply
3、CompletableFuture thenApply(Function super T,? extends U> function)
该方法接受一个Function函数式接口作为参数,用于对CompletableFuture的结果进行处理,并返回新的CompletableFuture对象。
参数:
Function
:一个带有一个参数的函数式接口,用于对异步任务的结果进行转换或处理。
4. thenAccept
4、CompletableFuture thenAccept(Consumer super T> consumer)
该方法接受一个Consumer函数式接口作为参数,用于对CompletableFuture
的结果进行消费,没有返回值。
参数:
Consumer
:一个带有一个参数的函数式接口,用于消费异步任务的结果。
5. thenRun
5、CompletableFuture thenRun(Runnable action)
该方法接受一个Runnable函数式接口作为参数,用于在CompletableFuture的结果完成后执行指定的操作,没有返回值。
参数:
BiFunction
:一个带有两个参数的函数式接口,用于合并两个CompletableFuture的结果。
6. thenCombine
6、CompletableFuture thenCombine(CompletionStage extends V> other, BiFunction super T,? super U,? extends V> fn)
该方法接受一个CompletionStage
对象和一个BiFunction
函数式接口作为参数,用于等待当前CompletableFuture
和另一个CompletionStage
对象都完成后,将其结果进行组合处理,并返回新的CompletableFuture
对象。
参数:
CompletionStage
:代表一个异步任务的执行状态。
返回值:
CompletableFuture
:表示一个异步任务的结果,可以通过该对象获取异步任务的执行结果。CompletableFuture
:表示一个异步任务的结果,没有返回值。
java 演示
import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;public class CompletableFutureExample { public static void main(String[] args) throws ExecutionException, InterruptedException { // 使用supplyAsync方法创建一个CompletableFuture对象来执行有返回值的异步任务 CompletableFuture future = CompletableFuture.supplyAsync(() -> { System.out.println("异步任务正在执行"); return 100; }); // 使用thenApply方法对异步任务的结果进行处理,并返回新的CompletableFuture对象 CompletableFuture processedFuture = future.thenApply(result -> { System.out.println("对异步任务结果进行处理"); return "处理后的结果:" + result * 2; }); // 使用get方法阻塞当前线程,并获取异步任务的执行结果 String result = processedFuture.get(); System.out.println(result); }}
异步任务正在执行对异步任务结果进行处理处理后的结果:200
来源地址:https://blog.csdn.net/weixin_44427181/article/details/131699062
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341