首页 > 其他分享 >CompletableFuture 使用详解

CompletableFuture 使用详解

时间:2024-04-28 20:11:18浏览次数:18  
标签:System 详解 CompletableFuture 使用 println future Hello out

1.runAsyncsupplyAsync:用于异步执行任务。

// runAsync:没有返回值
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
    System.out.println("Hello");
}, executor);

// supplyAsync:有返回值
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
    System.out.println("Hello");
    return "World";
}, executor);

// 异常为 Exception 必须 try 或 添加异常签名
// 可以设置超时时间
// 如果线程中断会结束阻塞,抛出异常
future2.get();

// 异常为 RuntimeException 不强制 try
// 不能设置超时时间
// 不能响应线程中断,继续等待
future2.join();
  2.thenApplythenAcceptthenRun:用于在前一个任务完成后执行后续操作。
// 待 future 返回后,下面的才会执行
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

// thenApply:接收 future 的结果,返回一个新值
CompletableFuture<String> future2 = future.thenApply(s -> s + " World");

// thenAccept:接收 future 的结果,无返回值
CompletableFuture<Void> future3 = future.thenAccept(s -> System.out.println(s));

// thenRun:无参无返回值
CompletableFuture<Void> future4 = future.thenRun(() -> System.out.println("完成了"));

System.out.println(future.join());// Hello
System.out.println(future2.join());// Hello World
System.out.println(future3.join());// null
System.out.println(future4.join());// null
  3.thenCombinethenAcceptBothrunAfterBoth:用于组合两个 CompletableFuture 的结果。
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World");

CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);

System.out.println(combinedFuture.join());// Hello World
  4.applyToEitheracceptEitherrunAfterEither:用于在两个 CompletableFuture 中任一完成时执行后续操作。     5.allOfanyOf:用于等待多个 或 任意 CompletableFuture 的完成。
String[] arr = new String[2];
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> arr[0] = "Hello");
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> arr[1] = "World");

// allOf:等待所有 future 全部完成
CompletableFuture.allOf(future1, future2).join();
System.out.println(arr[0] + " " + arr[1]);// Hello World
  6.exceptionally:用于处理异常情况。
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    return 1/0;
}).exceptionally(ex -> {
    System.out.println("异常信息: " + ex.getMessage());// 异常信息: java.lang.ArithmeticException: / by zero
    return 0;
});

System.out.println(future.join());// 0
  7.handle:用于处理前一个任务的结果或异常。     8.whenComplete:用于在前一个任务完成后执行回调,无论成功还是失败。    

标签:System,详解,CompletableFuture,使用,println,future,Hello,out
From: https://www.cnblogs.com/yfeil/p/18164411

相关文章

  • python使用迭代生成器yield减少内存占用的方法
    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。1.基本使用首先我们用一个例子来演示一下迭代生成器yi......
  • containerd 配置使用私有镜像仓库 harbor
    前言​当要从非安全的镜像仓库中进行Pull、Push时,会遇到x509:certificatesignedbyunknownauthority错误提示;这是由于镜像仓库是可能是http服务,或者https的证书是自签名的就会出现这个问题。Containerd可以配置为连接到私有镜像仓库,并使用仓库在每个节点上拉取私......
  • 使用minikube在云服务器安装k8s单机版
    1:前置安装了docker环境2:进入minikube的官网页面,下载命令https://minikube.sigs.k8s.io/docs/start/curl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudoinstallminikube-linux-amd64/usr/local/bin/minikubeminikubekubectl--......
  • 使用 WordPress搭建一个个人博客
    安装LNMP首先需要下载LNMP:wgethttp://soft.vpser.net/lnmp/lnmp2.0.tar.gz-cOlnmp2.0.tar.gz下载完成后解压并执行:tarzxflnmp2.0.tar.gz&&cdlnmp1.5&&./install.shlnmp选择想要安装的版本然后回车开始安装,这里时间比较长,耐心等待一下,看到以下显示表示安装成功配......
  • 38天【代码随想录算法训练营34期】第九章 动态规划part01 (● 理论基础 ● 509. 斐波
    理论基础斐波那契数classSolution:deffib(self,n:int)->int:ifn==0:return0ifn==1:return1returnself.fib(n-1)+self.fib(n-2)爬楼梯classSolution:defclimbStairs(self,n:int)->i......
  • 使用vscode写Markdown并且导出为pdf(干货)
    目录序言下载vscode安装插件markdown语法导出为pdf序言大家在学习过程中都会有记笔记的好习惯(美观的笔记当然是上上选),于是,Markdown就是一个不错的选择,待会也会附上一下常用基础语法。笔者比较喜欢使用vscode,有插件它就是无所不能的(bush。下载vscode官网下载https://code.v......
  • matlab使用Copula仿真优化市场风险数据VaR分析
    原文链接:http://tecdat.cn/?p=4305原文出处:拓端数据部落公众号 使用Copula建模相关默认值 此示例探讨了如何使用多因素copula模型模拟相关的交易对手违约。鉴于违约风险敞口,违约概率和违约信息损失,估计交易对手组合的潜在损失。一个creditDefaultCopula对象用于每个债务人......
  • Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用
    1:Angularcli创建组件componentnggcomponentcomponents\rightnggcwave简写需要定位到根路径下即可创建组件CouldnotfindanNgModule.Usetheskip-importoptiontoskipimportinginNgModule.PSC:\myAngulrDemos\20240428demo\mydemo01\src>cd..PSC......
  • R使用LASSO回归预测股票收益
    原文链接:http://tecdat.cn/?p=4228原文出处:拓端数据部落公众号 使用LASSO预测收益1.示例只要有金融经济学家,金融经济学家一直在寻找能够预测股票收益的变量。对于最近的一些例子,想想Jegadeesh和Titman(1993),它表明股票的当前收益是由前几个月的股票收益预测的,侯(2007),这表明一......
  • 组件的使用、父子通信、ref属性(父子通信)、动态组件、 keep-alive、插槽
    【组件的使用】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">&......