范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

CompletableFuture功能介绍及源码分析

  1 背景
  上一篇文章中,我们讲了 CompletionService 对 Future的优化,但是有个局限就是只能对多个任务的完成情况进行编排,如果进行链式,组合等处理的话,实现的逻辑会比较复杂。
  我们今天所说的CompletableFuture 是对Future 的扩展和增强,完美的弥补Future 的局限性,实现了对任务的多种链式,组合编排。今天我们就CompleteableFuture的功能做个详细的介绍和讲解。
  2 功能
  CompletableFuture 最主要的就是解决了异步回调的问题,异步调用可以有返回结果,也可以没有返回结果,其中有两个最基本的方法,我们会从源码的角度详细分析,我们先看下里面丰富的调用方法吧。
  这里面的方法都有一个特点,正常的不带Async,默认线程池的Async 和带自定义线程池的Async 三种。这些都是重写的方法,会一种就可以了,强烈建议使用自定义线程池的。thenApply :  等待前一个任务处理结束后,拿着前置任务的返回结果,再做处理,并且返回当前结果 thenAccept: 等待前一个任务处理结束后,拿着前置任务的返回结果,再做处理,当然处理没有返回结果 thenRun: 等待前一个任务处理结束后,再做处理。不接收前置任务结果,也不返回结果 thenCombine: 可以让任务1和任务2一起执行,等待任务1和任务2全部搞定,获取前两个任务的结果执行最终处理,最终处理也可以返回结果 thenAcceptBoth: 让前置任务和后续任务同时执行,都执行完毕后,拿到两个任务的结果,再做后续处理,但是没有返回结果 runAfterBoth: 让前置任务和后续任务同时执行,都执行完毕后,再做后续处理 applyToEither: 前面两个任务同时执行,有一个任务执行完,获取返回结果,做最终处理,再返回结果 runAfterEither:前面两个任务同时执行,有一个任务执行完,做最终处理 thenCompose: 连接两个任务,前置处理完,执行后续,后续可以拿到前置任务的结果,并且做处理,最终返回的是CompletionStage whenComplete:可以拿到上一个任务的返回结果和异常,但是当前处理没有返回结果,无法影响最终让任务的结果内容
  3 源码分析
  3.1 runAsync 源码分析
  基于这个基础的方法,来分析下CompletableFuture 是如何执行异步任务,如何触发后续任务执行的。
  这个地方将任务和CompletableFuture封装到一起,作为AsyncRun的对象,将AsyncRun交给线程池执行 (这个线程池可以是默认的,也可是自定义的)
  当前任务没执行完成,则执行,如果执行完了,就执行后续任务。
  可以看出最底层使用的是栈的结构,然后从栈的顶部开始执行任务。
  3.2 thenRun 方法源码分析
  后续任务,可以在前继任务执行完成后通过postComplete方法触发,也可以在任务在压栈前后,会尝试执行后续的任务。
  如果传递了线程池,代表异步执行,直接走if代码块中的内容,直接进行压栈操作;
  如果没有传递线程池,同步执行,需要先执行uniRun,如果没有结果,然后再执行if中的压栈操作。
  如果c == null,代表异步执行;如果c != null,嵌套执行,同步执行
  最后还是通过线程池的excute 方法进行执行。
  4 总结
  这是整个CompetableFuture 异步任务执行的流程图,虽说比较复杂,但是流程很清楚。主要就是完成如何异步进行任务执行和 继续后续任务的。
  如果你喜欢这篇文章,别忘了关注点赞哦。

争夺十年终分高下,不存在绝代双骄,C罗被甩开,梅西坐三望二2022年卡塔尔世界杯决赛阿根廷通过点球战胜了法国,赢下了这场终局之战,潘帕斯雄鹰的队徽上绣上了第三颗星星,南美洲球队时隔20年重新回到世界杯冠军的王座上。当阿根廷队长梅西被队友簇过去10年NBA选秀太邪乎!探花竟然全面强于状元郎2022头条生机大会在头条看见彼此最奇葩的玄学,NBA过去10年选秀,竟然出现探花普遍比状元强的现象!!且听我一一道来,供大家评判对错。2012年探花比尔,一人一城,奇才队核心,三符合预期5场比赛4场剧本区1场黄金区,英冠近5场比赛数据总结如果用来预估胜平负的结局,那就100命中了。一五场比赛基本形势1维冈VS谢菲联,比赛结果12,符合赛前雷哥数据看弱维冈的格局,开在了剧本区第一位的比分,赔率为区域内倒数第二。2莱切云姑与树上的灯作者朱廷九柿子红,柿子青,不怕雨,不怕风夏里绿阴凉,秋后挂红灯。仲春,柿子花开了暮秋,柿子果红了。每逢柿子花开果红时,那柿子红,柿子青的儿歌就响在我的心底。要知道,那儿歌可是俺云姑教的,它一人情世故就是生活头条创作挑战赛1搬家,让朋友帮忙,吃饭花了4700元。心疼死我了。找搬家公司,人家要1500,我嫌贵。傻逼是见便宜就操,牛人是见便宜就跑。遇到任何风景市场化,吃了一个哑巴亏,懂了。极具特色的家常菜红烧茄子,外焦里嫩,香甜可口,比红烧肉还香茄子,是生活中比较常见的一种蔬菜,它不仅价格比较实惠,口感香甜,而且里面还富含了多种营养物质,如蛋白质碳水化合物维生素以及铁钙等微量元素。茄子作为四季都有的蔬菜,其做法也多种多样,家常菜品45款分享,简单的家的味道,久久难忘,你也做几道尝尝吧曾经看到一篇文章中写道美食当前,总能有所思,或馋性千娇,食前观察吃中思想品后体煨,食为天性,静静地咀嚼,轻轻地回味,非比寻常的韵致。吃食是一种幸福,品味是一种情趣,而透明墨香感受文冬季干燥吃吃这个小东西,营养又鲜美,这样做手残党也能秒变大厨冬季干燥吃吃这个小东西,营养又鲜美,这样做手残党也能秒变大厨。冬天到了,出门前我们总是要全副武装,手和脸总不忘涂一些保温的护肤品,还行戴上手套帽子和围巾等才肯出门,不仅要防寒,还得早餐不用外边买了,教你7道早餐做法,好吃不重样,吃饱又营养冬日生活打卡季每天早餐的时候,大家是不是不知道该吃什么好呢?于是经常在外面买着吃,可是外面买的再好吃,不如自己在家做得干净卫生,营养又健康,家人吃着也放心,而且自己做还省钱。所以今汉画像石徐州汉画像石艺术馆藏品赏析(2)汉画像石徐州汉画像石艺术馆藏品赏析(2)徐州汉画像石艺术馆坐落在风景秀丽的云龙湖风景区内,依山面水,环境幽雅。这是一座陈列收藏研究汉画像石的专题性博物馆,被评为江苏省优秀博物馆国家上海小资情调的招牌,这次彻底玩砸了?周末偷空去转了下田子坊。印象中人挤人的地方,如今冷清了很多。特别是里面的商家,很多已经关店倒闭,还开着的也在降价促销,一副萧条落寞的样子。来都来了,扫个场所码吧哎,挂了个U型锁关门
国足新西兰拉练未尝胜绩,朱辰杰又造乌龙,成国足最佳射手为备战亚洲杯,中国男足选择了风景秀丽气候宜人的新西兰开启了拉练之旅。本次拉练是新任主帅扬科维奇带领中国队首次参加的国际A级赛事。若没有中国足坛的反腐和打击假赌黑或许扬科维奇还不会接永祺车业IPO曾年销百万辆的共享单车业务已近归零,过半募资追风Ebike能否如愿?每经记者范芊芊每经编辑梁枭作为全面注册制下的主板平移项目之一,永祺(中国)车业股份有限公司(以下简称永祺车业)于3月初更新披露了主板IPO招股书(申报稿),目前处于已受理状态。在共测试工作中,如何分辨是前端问题还是后端问题?测试工作中,如何分辨是前端问题还是后端问题?在测试工作中,如何分辨是前端问题还是后端问题,以下是一些常用的方法检查错误提示当出现问题时,查看错误提示信息,如果提示信息涉及到前端技术体验不输旗舰机,2000元左右拿顶配,这四款手机你值得拥有预算只有2000,还想要流畅玩大型游戏,这几款性价比中端神机你值得拥有。2000元价位的手机真的很香,顶配手机玩王者荣耀,吃鸡等洒洒水,连原神也是能正常驾驭的。一第一款推荐的是红米请珍惜9。5美金以内的FIL虽然目前fil在熊市中的表现并不乐观,但Filecoin及他的核心星际文件系统(IPFS)仍然处于进一步发展与完善中!目前,Fil链上每天大约有25,000笔交易,总共存储了大约1顺丰30年紧随时代多元化布局国际化开端迎发展先机2023年国家相关部门提出,今年将扎实推进农村寄递物流体系建设,巩固快递进村三年行动成果,加强县级寄递公共配送中心和村级寄递物流综合服务站建设。在快递进村工程实施进入第十个年头,这点点滴滴,写下最真的情感每当想起你,都默默地发呆,望向远方。望一段小桥流水,思一人静夜眷恋,煮一壶云水相拥,吟一曲柔情深种。春花旖旎,是我们深情的凝望夏雨呢喃,是我们心灵的驿动漫山枫红,写满我们执手徜徉的我愿终生当好红色大喇叭忠诚一辈子,奉献一辈子。他脱下戎装,奉献地方,秉承军队的光荣传统,在不同的岗位继续发热发光他以满腔热忱去传播正能量,把爱国演讲作为一辈子的事业和追求他就是71岁退休老兵徐佐林。徐佐断头台上,法国艳后却跟刽子手道歉对不起,踩您的脚了1792年,路易十六的王后被推向断头台。当美丽动人的玛丽王后走向断头台时,连凶神恶煞的刽子手都乱了方寸,双眼圆睁,双脚再也挪不动了。正当刽子手心猿意马之时,王后不小心踩到了他的脚,未解之谜埃及金字塔埃及金字塔的建造是一个历史上的未解之谜,因为尽管我们知道金字塔是由古埃及法老建造的,但是我们仍然不知道他们是如何建造的。以下是一些原因1。巨大的石块金字塔是由巨大的石块建造而成的,许昌七女村得名于七女冢,冢里葬着哪七女?周末,跟着老梁逛许昌第260站杜门村(七女村)许昌七女村得名于七女冢,冢里葬着哪七女?老家许昌文图梁耀国从西临新107国道北临新元大道的小屈庄往南走不多远,就是杜门村。骑至村当间,