首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CompletableFuture anyOf

CompletableFuture anyOf
EN

Stack Overflow用户
提问于 2020-05-05 12:02:00
回答 1查看 296关注 0票数 0

所以早些时候我做了考试,有个问题。

问题5:异步编程(8点)

请考虑下面的程序。方法doSomething ( )可以运行一段不确定的时间。

导入java.util.concurrent.CompletableFuture;类CF {静态空doSomething() { ..}静态CompletableFuture printAsync(int i) {返回CompletableFuture.runAsync(() -> { doSomething();System.out.print(i);});}公共静态空洞主(string[] args) { CompletableFuture.anyof( printAsync(1) .thenRun(() -> printAsync(2)),printAsync(3) .thenRun(() -> printAsync(4));剂量();}

如果main正常运行,程序可能打印的输出是什么?

如果给定的输出是可行的,请用字符串yes填空。用字符串“否”填空,如果main将永远不会打印给定的输出。

请注意,这个问题将由一个机器人评分。因此,填写任何其他文本,如“不!”、“是的,因为……”、“永不!”等,都会导致答案被标记为错误,即使答案的意图是正确的。

(a) 1

(b) 2

(c) 3

(d) 4

(e) 12

(f) 14

(g) 23

(h) 24

(i) 124

(j) 134

(k) 243

(l) 234

(m) 213

(n) 1324

(o) 4321

我的问题是关于CompletableFuture.anyOf的。当其中一个进程完成时,另一个进程是在另一个thenRun运行之后完成还是提前终止?

EN

回答 1

Stack Overflow用户

发布于 2020-05-05 14:47:28

anyOf只创建一个新的未来,允许调度其他操作,以便在指定的期货中至少有一个已经完成时执行。它不影响它的任何论点。

但是请注意,main方法只使用它来链接另一个操作,而不等待任何未来的完成。它只执行另一个doSomething(),这需要一个有意不指定的时间。然后,main方法返回,在标准环境中,当它检测到只有守护进程线程存在时,JVM将终止。

因为这个JVM终止不关心任何后台操作,所以没有任何完成的保证。原则上,即使没有输出也是可能的。

但是,链式操作定义了依赖项,这些依赖项是服从的。

  1. 1 → 2.因此,您将永远不会在输出中看到没有11。当两个数字都存在时,1必须位于1之前。如果您看到4,至少23中必须有一个在那里,并且必须在4之前。当它是2时,第一点也适用。但是请注意,当23同时存在时,只需要其中一个位于4之前,因此3412将是一个有效的输出。

除了这些规则之外,命令可以是任意的,而且,正如所说的,完成是没有保证的。您可以看到唯一的1或唯一的3,或13按任意顺序排列。但是,正如上面所解释的,您不能看到唯一的2或唯一的4。您可以查看每个建议的答案,并检查它是否违反了某个依赖项。如果没有,这是一个可能的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61612672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档