专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Java19的结构化并发,一种新的多线程编程模式

  头条创作挑战赛
  结构化并发在Java19中是孵化功能,比预览功能的成熟度更低。想要尝鲜的朋友可以试试。想要在LTS版本中使用该功能,估计得等到Java25了。
  结构化并发并不是一个新鲜的名词,这个概念已经出现很久了。Kotlin的协程(Coroutines)就已经实现了结构化并发。Java19中引入了结构化并发,可以作为一个新的多线程编程模式。结构化并发和虚拟线程(说一说Java19中的虚拟线程)都来自OpenJDK的Loom项目。多线程编程的难点
  多线程编程一直以来都是Java开发中比较复杂难懂的部分。这一方面是多线程编程自身的复杂性,另外一方面则是由于语言和标准库的限制。如果给你一个开发任务,让你在单线程中完成,那肯定会简单很多。比如下面的一段代码,在takeAction方法里面,分别调用callOp1和callOp2方法来得到两个值,最后再把用得到的结果值来调用callOp3。inttakeAction(Stringinput){intresult1callOp1(input);intresult2callOp2(input);returncallOp3(result1,result2);}
  如果takeAction方法在同一个线程中执行,那么整个方法内部的调用流程是很清晰的。当takeAction方法返回时,callOp1、callOp2和callOp3方法必定已经完成,或者由于之前的错误还未被调用。也就是说,这些方法的状态是确定的,只能处于执行成功、执行失败和未执行这三种状态之一。
  如果callOp1、callOp2和callOp3这3个方法都是在各自的线程中运行的,那么很多在单线程情况下理所应当的结论,就不会成立了。这些方法的状态会变得更复杂:由于执行方法的线程池的负载过大,方法处于等待执行的状态。执行方法的线程可能被中断,导致方法的执行被取消。callOp1和callOp2是并行执行的,如果callOp1在执行中产生了错误,而此时callOp2如果还在执行中,应该取消callOp2的执行,因为takeAction会以错误的结果返回,callOp2的结果不再需要了。当takeAction方法以错误的结果返回时,callOp2可能仍然还在执行中,直到得到最后的结果,但是这个结果会被丢弃。这是因为对callOp2的取消请求可能未得到及时的响应。任何一个任务的执行时间可能都过长,比如它可能需要等待别的任务完成。这就要求妥善处理超时的问题。
  这是多线程开发难以掌握的原因之一,因为它要求你考虑各种复杂的情况,拉高了开发的门槛。在实际的开发中,我们会使用Java标准库和第三方库提供的API来进行多线程开发。这可以在一定程度上简化开发。任务执行
  在多线程开发中,绝大部分的工作都可以抽象成任务执行。这些任务的执行有下面这些特点:执行流程从主任务开始。主任务会被划分成多个子任务。子任务可以被进一步划分。全部的任务会组成一个树形结构。每个任务在独立的线程中执行。任务的执行可能成功或失败,也可能被取消。父任务负责管理子任务。根据子任务的执行状态,已有的正在运行的子任务可能被取消,新的子任务可能被创建。任务之间通过线程安全的数据结构来共享数据,或者使用消息传递机制来进行通信。
  在目前的Java开发中,对于这样多线程任务的执行,一般使用的是CompletableFuture或ListenableFuture的级联方式。每个任务返回一个CompletableFuture对象来表示执行的结果。如果执行成功,CompletableFuture表示得到的结果值;如果执行失败,CompletableFuture表示产生的异常。使用CompletableFuture时并不是直接获取结果,而是添加一个回调方法,表示当前任务执行之后的下一步操作。
  同样的takeAction方法,如果用CompletableFuture来实现,会是下面这样的代码。与单线程的代码相比,CompletableFuture的代码并不直观。CompletableFutureIntegertakeAction(Stringinput){varresult1callOp1(input);varresult2callOp2(input);returnresult1。thenCombine(result2,(v1,v2)newint〔〕{v1,v2})。thenCompose(valuescallOp3(values〔0〕,values〔1〕));}结构化并发
  对于结构化并发(StructuredConcurrency),并没有一个清晰的解释。结构化并发要解决的问题是,如何让开发人员更加容易地编写并发代码,尽可能地对开发人员屏蔽多线程相关的细节。具体来说,结构化并发让你以类似单线程的方式来编写多线程代码。
  由于结构化并发在Java19中是孵化功能,相关的模块需要被显式地启用。这是通过添加javac和java的参数addmodulesjdk。incubator。concurrent来实现的。
  结构化并发使用了前面提到的任务执行的概念。在使用结构化并发之前,首先需要创建一个结构化任务作用域(scope),然后在这个作用域中创建并执行任务。这些任务的生命周期由作用域负责管理。当作用域被关闭时,其中所包含的任务都会结束。这就意味着开发人员不用处理任务的失败、取消和超时等情况,完全由底层平台提供支持。
  在一个作用域中,其中创建的任务中也可以创建自己的作用域,用来管理该任务的子任务。这就形成了一个任务组成的树形结构。
  使用结构化并发的基础类是jdk。incubator。concurrent。StructuredTaskScope。StructuredTaskScope表示的是一个使用结构化并发的作用域。
  下表列出了StructuredTaskScope中的方法。
  方法
  说明
  fork(Callablelt;?extendsUtask)
  启动一个线程来执行任务
  join()
  等待所有任务执行完成,或当前作用域被关闭
  joinUntil(Instantdeadline)
  与join()相同,只不过设置了终止时间
  shutdown()
  结束任务作用域
  close()
  关闭任务作用域
  下面的代码给出了StructuredTaskScope的使用示例,用来实现takeAction方法。在takeAction方法中的作用域中创建了调用callOp1和callOp2的子任务。等这两个子任务完成之后,使用得到的结果调用combine方法。combine方法中也创建了作用域,调用了callOp3一个子任务。publicclassStructuredWay{inttakeAction(Stringinput)throwsInterruptedException,ExecutionException{try(varscopenewStructuredTaskScope。ShutdownOnFailure()){FutureIntegerv1scope。fork(()callOp1(input));FutureIntegerv2scope。fork(()callOp2(input));scope。join();scope。throwIfFailed();returncombine(v1。resultNow(),v2。resultNow());}}intcombine(intresult1,intresult2)throwsInterruptedException,ExecutionException{try(varscopenewStructuredTaskScope。ShutdownOnFailure()){FutureIntegerrscope。fork(()callOp3(result1,result2));scope。join();scope。throwIfFailed();returnr。resultNow();}}}
  使用StructuredTaskScope的基本流程如下:主任务创建一个StructuredTaskScope对象。使用fork方法来创建子任务。使用join或joinUntil方法来等待子任务完成或取消。在join或joinUntil方法返回之后,处理子任务中可能出现的错误,并使用子任务产生的结果。关闭作用域对象,一般使用trywithresources可以自动进行关闭。
  看到上面的代码,你的第一反应可能是这样的代码也很繁琐。不过这里的重点在于思维方式的变化。结构化并发的思维方式,更加类似传统的单线程应用,因此更容易理解。
  在上述的代码中,用到的是作用域的实现ShutdownOnFailure。与它作用类似的是ShutdownOnSuccess。ShutdownOnFailure适用的是作用域中的所有任务都必须成功的场景。只要有一个任务失败,该作用域的shutdown方法会被调用,其他未完成的任务线程也会被中断。ShutdownOnSuccess适用的是作用域中的任意任务成功即可的场景。只要有一个任务成功,该作用域的shutdown方法会被调用,其他未完成的任务线程也会被中断。
  对于作用域的任务,如果在执行中出现错误,可以调用StructuredTaskScope的shutdown方法来终止执行。调用shutdown方法会阻止新任务的执行,同时取消正在运行中的任务。
  关于结构化并发的基本介绍就到这里。由于结构化并发的实现还处于非常早期的阶段,API可能发生在后续版本中产生变化。大家并不需要关注过多的细节,但是有必要关注这种即将到来的新的多线程编程模式,应该会让以后的多线程编程更简单。

暴雨过后的村庄到了第二天醒来时,我便透过窗户望了望天,太阳横卧在天边,正一点一点地往上爬去,看上去特别费力。云朵在澄蓝的天空中飘荡,那么轻盈,那么自由自在,而我的心情是多么沉重。我又把注意力集中河南长葛市抗战老兵胥其昌逝世,享年98岁河南长葛市和尚桥镇抗战老兵胥其昌于2022年10月30日下午五时许在家与世长辞,享年98岁。2015年胥其昌老兵获颁国家抗战胜利70周年纪念章老兵档案空军机械师胥其昌,生于1925能否绕过光刻机限制?华为公布超导量子芯片专利,到底有何神奇?就在华为向美国电商巨头亚马逊提起专利诉讼后不久,又一重磅专利被公布华为超导量子芯片专利公布。这项发明专利使用超导技术,制造出包含控制器和耦合器的量子芯片,旨在降低量子比特之间串扰。1亿欧元!曼联将签下尤文当家球星!中场大将或遭扫地出门对于曼联来说,球队在本赛季的表现算是中规中矩。虽然在开局阶段,他们的发挥一度相当低迷,不过在滕哈赫迅速调整了战术思路之后,曼联的表现有了明显的改观。从当前情况来看,在联赛前四名的争Prada这个新出的戒指怎么回事?说到Prada大约第一秒就能想到包包然后就是极其高冷又Fashion的画风作为在奢侈品品牌里占有一席之地的品牌Prada还是挺受欢迎的很多单品也成为了爆款。好看的单品有不少hobo加快发展方式绿色转型来源经济日报习近平总书记在党的二十大报告中指出必须牢固树立和践行绿水青山就是金山银山的理念,站在人与自然和谐共生的高度谋划发展。加快发展方式绿色转型,是党中央立足全面建成社会主义现学费都欠着,你有什么资格谈恋爱?夜读开卷有益我一边跟男朋友吃饭,一边经受着随时的拷问。总有一个强大的声音说学费都欠着,你有什么资格谈恋爱?第一次听到学生这样说时,艾苓教授感觉自己的心脏被狠狠地撞击了一下。艾苓任教外媒苹果开始扛不住了大家都知道,苹果公司不仅是全球最会赚钱的科技企业,而且还是市值最高的科技企业,其市值一度超过3万亿美元,而造成这种情况出现的主要原因,就是因为苹果拥有强大的闭环生态和几乎没有竞争对暗网到底是什么?为何亲历者都闭口不谈?它远比你了解的要更恐怖世界上真的有暗网存在吗?在这当中究竟有什么交易?传闻中,暗网无所不知无所不做!在其中有非常多的黑色交易。在这当中不仅有器官买卖人口买卖,还有更多的暴力血腥视频,让人看着瑟瑟发抖!任外媒天文学家发现距地球最近黑洞据美联社11月4日报道,天文学家发现了距离地球仅1600光年的已知最近的黑洞。科学家4日报告说,这个黑洞的质量是太阳的10倍。之前的纪录保持者与地球的距离是它与地球距离的3倍。科学太鸡肋!23中7拿15分僵持阶段又掉链子,事实证明,他真学不了KDNBA常规赛继续进行,鹈鹕对阵老鹰的比赛正式打响。本场比赛两队打得非常激烈攻防两端所展现出来的实力也非常接近,整场比赛下来两队的比分也一直维持在个位数上,领先的优势也是相互交替领先
贵了100块,处理器也丢掉天玑升骁龙8了红米K60这兄弟能处吗?红米K60系列手机终于出生了,2022年12月27日晚上,红米总裁卢伟冰发布了K60系列三款手机,分别是K60e天玑8200处理器K60标准版骁龙8和K60Pro骁龙8G2处理器,中国信通院发布国内手机产品通信特性与技术能力监测报告(2022年第三期)2022年第三季度,我国手机市场中5G手机产品继续呈现稳定发展态势4G手机产品款型数略有回落,4G手机频率特征变化不大,4G手机产品的传输能力等级呈低速率发展搭载Android版本GDPwin4预售来袭,一个字香GDP掌机一直广受消费者喜爱,尤其是其体积小巧携带方便,非常适合出差办公,充电器和手机是通用的,减轻了出门负担。目前最新的产品WIN4正在预售,价格是4999起步。配置很高,680iPadmini新款曝光,使用a16处理器iPadmini新款曝光?这个产品看起来是要加量不加价?这个产品的消息是,可能在2023年推出,如果出意外在2024年初出来,这个产品是要使用a16处理器,可能到时候也不是什么最新电商平台年货节开启京东小时购即时送货,天猫唯品会商品一件立减12月26日以来,各个电商平台先后开启了年货节的促销节奏。今年年货节,被誉为最简单的一届年货节,人们对比多个电商平台发现,年货节的玩法变化明显,天猫唯品会等平台均采用无需满减凑单一搭载年度最强核显Radeon680M零刻SER6Pro评测6800H真香近期,多家品牌密集发布了几款迷你主机,掀起了一阵风潮,让不少网友关注上迷你主机这个领域,今天给大家带来的是目前正在预售的零刻SER6Pro标配版(32GB500GB)使用体验。外观外媒评价图丽ATX18mm镜头画面中心锐度非常锐利图丽(Tokina)的ATXM1118mmf2。8E是一支专为索尼APSC画幅微单相机设计的超广角变焦镜头,等效35mm全幅焦距为1727mm,凭借其小巧紧凑的体积,成为了索尼非全RedmiK60Pro值不值得入?参数不重要,这3个细节值得注意看了RedmiK60系列发布会的小伙伴,肯定都知道,RedmiK60Pro要挑战2023性能之王,其配置参数都很强,那么RedmiK60Pro到底值不值得入呢?说实话,对于普通消费打开管理决策的黑箱如何利用反应时间,打赢谈判的心理博弈近年来,随着物联网大数据分析云计算群智感知等相关技术的持续发展,学术界对于人们的认知过程如何影响具体决策的研究越来越广泛和深入,促成了神经管理学和神经经济学等学科的诞生。浙江大学管除了AppleWatch,还有哪款智能手表与iPhone很搭?果粉来了解下文手机技巧库作为智能手表领域的领跑者,苹果旗下的AppleWatch经常被用户誉为最好的智能手表之一,也是和iPhone最搭的智能手表,毕竟苹果生态可不是盖的,搭配使用体验相当舒适年货节换笔电攻略首推带独显全能本,华硕联想二选一年关将至,很多电商平台都会在这最后的日子里开启最后一波年货节福利!有人想要在这个日子里给自己购置全新的衣服,亦或者是购置好吃的零食,但是除了这些之外,很多人选择换新一款笔记本电脑,
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网