广州个人网站搭建天津招标信息网

news/2025/9/30 16:12:14/文章来源:
广州个人网站搭建,天津招标信息网,站长工具高清,无极在线招工招聘信息前面两篇文章已经整理了CompletableFuture大部分的特性#xff0c;本文会整理完CompletableFuture余下的特性#xff0c;以及将它跟RxJava进行比较。 3.6 Either Either 表示的是两个CompletableFuture#xff0c;当其中任意一个CompletableFuture计算完成的时候就会执行。 …前面两篇文章已经整理了CompletableFuture大部分的特性本文会整理完CompletableFuture余下的特性以及将它跟RxJava进行比较。 3.6 Either Either 表示的是两个CompletableFuture当其中任意一个CompletableFuture计算完成的时候就会执行。 方法名描述acceptEither(CompletionStage? extends T other, Consumer? super T action)当任意一个CompletableFuture完成的时候action这个消费者就会被执行。acceptEitherAsync(CompletionStage? extends T other, Consumer? super T action)当任意一个CompletableFuture完成的时候action这个消费者就会被执行。使用ForkJoinPoolacceptEitherAsync(CompletionStage? extends T other, Consumer? super T action, Executor executor)当任意一个CompletableFuture完成的时候action这个消费者就会被执行。使用指定的线程池 Random random new Random();CompletableFutureString future1 CompletableFuture.supplyAsync(()-{try {Thread.sleep(random.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future1;});CompletableFutureString future2 CompletableFuture.supplyAsync(()-{try {Thread.sleep(random.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future2;});CompletableFutureVoid future future1.acceptEither(future2,str-System.out.println(The future is str));try {future.get();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}复制代码执行结果The future is from future1 或者 The future is from future2。因为future1和future2执行的顺序是随机的。 applyToEither 跟 acceptEither 类似。 方法名描述applyToEither(CompletionStage? extends T other, Function? super T,U fn)当任意一个CompletableFuture完成的时候fn会被执行它的返回值会当作新的CompletableFutureU的计算结果。applyToEitherAsync(CompletionStage? extends T other, Function? super T,U fn)当任意一个CompletableFuture完成的时候fn会被执行它的返回值会当作新的CompletableFutureU的计算结果。使用ForkJoinPoolapplyToEitherAsync(CompletionStage? extends T other, Function? super T,U fn, Executor executor)当任意一个CompletableFuture完成的时候fn会被执行它的返回值会当作新的CompletableFutureU的计算结果。使用指定的线程池 Random random new Random();CompletableFutureString future1 CompletableFuture.supplyAsync(()-{try {Thread.sleep(random.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future1;});CompletableFutureString future2 CompletableFuture.supplyAsync(()-{try {Thread.sleep(random.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future2;});CompletableFutureString future future1.applyToEither(future2,str-The future is str);try {System.out.println(future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}复制代码执行结果也跟上面的程序类似。 3.7 其他方法 allOf、anyOf是CompletableFuture的静态方法。 3.7.1 allOf 方法名描述allOf(CompletableFuture?... cfs)在所有Future对象完成后结束并返回一个future。allOf()方法所返回的CompletableFuture并不能组合前面多个CompletableFuture的计算结果。于是我们借助Java 8的Stream来组合多个future的结果。 CompletableFutureString future1 CompletableFuture.supplyAsync(() - tony);CompletableFutureString future2 CompletableFuture.supplyAsync(() - cafei);CompletableFutureString future3 CompletableFuture.supplyAsync(() - aaron);CompletableFuture.allOf(future1, future2, future3).thenApply(v -Stream.of(future1, future2, future3).map(CompletableFuture::join).collect(Collectors.joining( ))).thenAccept(System.out::print);复制代码执行结果 tony cafei aaron复制代码3.7.2 anyOf 方法名描述anyOf(CompletableFuture?... cfs)在任何一个Future对象结束后结束并返回一个future。 Random rand new Random();CompletableFutureString future1 CompletableFuture.supplyAsync(() - {try {Thread.sleep(rand.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future1;});CompletableFutureString future2 CompletableFuture.supplyAsync(() - {try {Thread.sleep(rand.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future2;});CompletableFutureString future3 CompletableFuture.supplyAsync(() - {try {Thread.sleep(rand.nextInt(1000));} catch (InterruptedException e) {e.printStackTrace();}return from future3;});CompletableFutureObject future CompletableFuture.anyOf(future1,future2,future3);try {System.out.println(future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}复制代码使用anyOf()时只要某一个future完成就结束了。所以执行结果可能是from future1、from future2、from future3中的任意一个。 anyOf 和 acceptEither、applyToEither的区别在于后两者只能使用在两个future中而anyOf可以使用在多个future中。 3.8 CompletableFuture异常处理 CompletableFuture在运行时如果遇到异常可以使用get()并抛出异常进行处理但这并不是一个最好的方法。CompletableFuture本身也提供了几种方式来处理异常。 3.8.1 exceptionally 方法名描述exceptionally(Function fn)只有当CompletableFuture抛出异常的时候才会触发这个exceptionally的计算调用function计算值。 CompletableFuture.supplyAsync(() - hello world).thenApply(s - {s null;int length s.length();return length;}).thenAccept(i - System.out.println(i)).exceptionally(t - {System.out.println(Unexpected error: t);return null;});复制代码执行结果 Unexpected error:java.util.concurrent.CompletionException: java.lang.NullPointerException复制代码对上面的代码稍微做了一下修改修复了空指针的异常。 CompletableFuture.supplyAsync(() - hello world).thenApply(s - { // s null;int length s.length();return length;}).thenAccept(i - System.out.println(i)).exceptionally(t - {System.out.println(Unexpected error: t);return null;});复制代码执行结果 11复制代码3.8.2 whenComplete whenComplete 在上一篇文章其实已经介绍过了在这里跟exceptionally的作用差不多可以捕获任意阶段的异常。如果没有异常的话就执行action。 CompletableFuture.supplyAsync(() - hello world).thenApply(s - {s null;int length s.length();return length;}).thenAccept(i - System.out.println(i)).whenComplete((result, throwable) - {if (throwable ! null) {System.out.println(Unexpected error:throwable);} else {System.out.println(result);}});复制代码执行结果 Unexpected error:java.util.concurrent.CompletionException: java.lang.NullPointerException复制代码跟whenComplete相似的方法是handlehandle的用法在上一篇文章中也已经介绍过。 四. CompletableFuture VS Java8 Stream VS RxJava1 RxJava2 CompletableFuture 有很多特性跟RxJava很像所以将CompletableFuture、Java 8 Stream和RxJava做一个相互的比较。 composablelazyresuableasynccachedpushback pressureCompletableFuture支持不支持支持支持支持支持不支持Stream支持支持不支持不支持不支持不支持不支持Observable(RxJava1)支持支持支持支持支持支持支持Observable(RxJava2)支持支持支持支持支持支持不支持Flowable(RxJava2)支持支持支持支持支持支持支持五. 总结 Java 8提供了一种函数风格的异步和事件驱动编程模型CompletableFuture它不会造成堵塞。CompletableFuture背后依靠的是fork/join框架来启动新的线程实现异步与并发。当然我们也能通过指定线程池来做这些事情。 CompletableFuture特别是对微服务架构而言会有很大的作为。举一个具体的场景电商的商品页面可能会涉及到商品详情服务、商品评论服务、相关商品推荐服务等等。获取商品的信息时/productdetails?productidxxx需要调用多个服务来处理这一个请求并返回结果。这里可能会涉及到并发编程我们完全可以使用Java 8的CompletableFuture或者RxJava来实现。 先前的文章Java8新的异步编程方式 CompletableFuture(一)Java8新的异步编程方式 CompletableFuture(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年除湿机厂家最新权威推荐排行榜:实力厂家技术口碑评测及场景适配选购指南吊顶/泳池/车库/防爆/调温/新风除湿机厂家推荐

当前除湿机市场需求持续攀升,工业生产对湿度精度要求愈发严苛,民用场景也对环境舒适度有了更高追求,但行业乱象却让用户选购难度大增。一方面,大量产品缺乏核心技术,除湿效率低、能耗高,难以适配电子、制药、家用…

2025 年液氨蒸发器厂家联系方式,众众电热:多领域加热设备供应与定制化解决方案提供商

在政策支持与产业升级的双重驱动下,液氨蒸发器等工业加热设备市场持续扩容,2024 年上半年市场规模已突破 52.7 亿元,预计 2025 年末将增至 68.5 亿元。化工合成、制冷储能等领域的需求增长,以及智能化、低能耗的技…

debian11不进入桌面环境打开chromiu

debian11不进入桌面环境打开chromiu在Debian非桌面环境中,使用Wayland(Weston)打开Chromium并打开特定网页,可以按照以下步骤进行:安装Weston和Chromium启动Weston合成器在Weston环境中启动Chromium 1,安装chrom…

【Batch】批量修改文件后缀

批量修改文件后缀 @echo off for %%F in (*.jpg) do (ren "%%F" "%%~nF.png" )-------------------------------------------------------------------------------------如果万事开头难 那请结局…

【solace】基于docker部署solace环境

一、solace https://www.solace.dev/ solace是一款高性能的消息中间件二、部署脚本docker run -d \-p 8080:8080 \-p 55555:55555 \-p:8008:8008 \-p:1883:1883 \-p:8000:8000 \-p:5672:5672 \-p:9000:9000 \-p:2222:2…

2025 年阿里巴巴开通实力商家店铺开通代运营 / 阿里巴巴新手开店全托管代运营公司推荐:南鑫粤网络 —— 全域运营解决方案与实战服务优势解析

2025 年的阿里巴巴 1688 平台已成为超 2.5 亿活跃采购商与千万级供应商汇聚的核心 B2B 阵地,实力商家与超级工厂模式成为店铺基础建设的关键方向。但随着平台商家突破 2000 万,竞争从 “入驻” 转向 “运营”,企业普…

Vue-element-admin开发指南 - 教程

Vue-element-admin开发指南 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

2025 年国内工作服厂家最新推荐排行榜:聚焦工艺设计与服务,精选权威榜单助企业采购冬季/春季/工人/车间/防静电/餐饮/劳保工作服厂家推荐

当前工作服市场产品质量参差不齐,部分产品面料不达标、耐用性差,且多数供应商缺乏个性化定制能力,难以满足不同行业企业的特殊需求,如医疗行业的抗菌需求、户外作业的防水保暖需求等。同时,企业采购时还常面临交付…

邯郸做网站的公司wordpress表情按钮

高维高斯分布基础 多位高斯分布的几何理解 多维高斯分布表达式为: p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e−12(x−μ)TΣ−1(x−μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21​…

ClickHouse 窗口函数使用详解(一) - 若

ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) 详解 一句话概括 "在每个部门内部,按工资从高到低给员工编号" 逐词解析 1. ROW_NUMBER()作用:生成顺序编号特点:从1开始,连续不重复…

学做网站容易吗源代码下载

一、文件读取 Client向NameNode发起RPC请求,来确定请求文件block所在的位置;NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地…

在 Vue 3 的 script setup 语法中,定义组件名称(name)

在 Vue 3 的单文件组件(SFC)中,使用 <script setup> 语法糖时,我们通常需要为组件指定一个名称(name),这在调试和递归组件中很有用。然而,由于 <script setup> 是一种编译时语法糖,它默认不提供直…

2025 年杀虫公司联系方式推荐 天津万康:靶向消杀 + 1 年质保 300 + 政企认可的虫害防控专家

行业背景随着公众健康意识提升与商业场景卫生标准升级,有害生物防制(PCO)行业迎来规范化发展新阶段。数据显示,国内餐饮、医疗、食品加工等领域因虫害问题引发的合规风险事件年均增长 12%,传统 “一次性消杀” 模…

即墨网站优化网站建设平台信息

在系统中缓存最常用的策略是&#xff1a;服务端需要同时维护DB和cache&#xff0c;并且是以DB的结果为准–Cache-Aside Pattern&#xff08;缓存分离模式、旁路缓存&#xff09; 读数据 单纯的读数据是不会产生数据不一致&#xff0c;只有并发下读和写才会存在数据不一致。 写…

2025 年最新 1688 代运营公司推荐榜单:助力企业突破电商困境,精选优质服务商阿里巴巴国际站代运营/新店起量代运营/数据分析代运营/爆款打造代运营公司推荐

在数字经济持续深化的 2025 年,1688 平台依旧是企业拓展线上销路、提升市场份额的核心阵地。但当前众多企业在 1688 店铺运营中,仍面临专业团队缺失、平台规则更迭应对不及时、流量获取与转化难、视觉营销效果不佳等…

ClickHouse 窗口函数详解:告别 GROUP BY 的局限性,实现灵活数据分析 - 若

什么是窗口函数? 窗口函数是 SQL 中一种强大的分析功能,它允许在对每一行进行计算时,能够访问到与当前行相关的多行数据。与 GROUP BY 不同,窗口函数不会将多行合并为一行,而是保留所有原始行,同时添加计算列。 …

简单WEB网站

第一步:创建项目结构 在PyCharm中创建以下目录结构 my_web_app/ ├── backend/ # Flask后端代码 ├── frontend/ # Vue前端代码 ├── venv/ # Python虚拟环境(可选) └──requirements.…

dhru商城网站建设wordpress注册logo

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

2025 年窗帘杆源头厂家最新推荐榜单:包含支架 / 环 / 全自动 / 可伸缩等多类产品及配件,帮助选到品质与交期双优的优质厂家

当前家居窗饰市场中,窗帘杆产品品质参差不齐、定制能力不足、供货效率低下等问题频发,让消费者和采购商在选择时倍感困扰。众多小型厂家缺乏专业研发团队,产品款式单一,无法满足家庭、写字楼、酒店等不同场景的个性…

大庆建设网站首页优化大师官方下载

1.链表的概念 对于顺序存储的结构最大的缺点就是插入和排序的时候需要移动大量的元素&#xff0c;所以链表的出生由此而来 先上代码&#xff1a; // 链表 public class LinkedList<T extends Comparable> {// 结点类class Node {T ele; // 当前结点上的元素内容Node ne…