当前位置: 首页 > 知识库问答 >
问题:

完全的未来。anyOf-所用语言需要帮助

云和同
2023-03-14

我需要一些关于anyOf javadoc将来使用的文献的帮助。

<代码>静态CompletableFuture

这个“相同的结果”是什么意思?与什么相同?与CompletableFuture数组中的任何其他未来相同?

谢谢Venkatesh Laguduva

共有2个答案

董意蕴
2023-03-14

同一系列可完成的未来中的任何其他未来一样?

确实如此。

一旦数组var-args的任何CompletableFutures完成,该方法就会返回一个具有相同结果的新CompletableFuture对象。

如果您查看实现,您可以获得确认。

public static CompletableFuture<Object> anyOf(CompletableFuture<?>... cfs) {
    return orTree(cfs, 0, cfs.length - 1);
}

调用orTree()

static CompletableFuture<Object> orTree(CompletableFuture<?>[] cfs,
                                        int lo, int hi) {
    CompletableFuture<Object> d = new CompletableFuture<Object>();
    if (lo <= hi) {
        CompletableFuture<?> a, b;
        int mid = (lo + hi) >>> 1;
        if ((a = (lo == mid ? cfs[lo] :
                  orTree(cfs, lo, mid))) == null ||
            (b = (lo == hi ? a : (hi == mid+1) ? cfs[hi] :
                  orTree(cfs, mid+1, hi)))  == null)
            throw new NullPointerException();
        if (!d.orRelay(a, b)) {
            OrRelay<?,?> c = new OrRelay<>(d, a, b);
            a.orpush(b, c);
            c.tryFire(SYNC);
        }
    }
    return d;
}
潘修文
2023-03-14

当它说相同的结果时,它意味着与第一个完成的未来相同的结果。

如果您使用以下内容:

CompletableFuture<String> stringFuture = CompletableFuture.supplyAsync(() -> {
    Thread.sleep(3000); // handle exc
    return "String";
});

CompletableFuture<Integer> intFuture = CompletableFuture.supplyAsync(() -> {
    Thread.sleep(4000); // handle exc
    return 1;
});

结果将与第一个完成的未来相同,如果字符串首先完成,则对象将是具有该未来值的字符串类型,依此类推。

在这种情况下:

CompletableFuture.anyOf(stringFuture, intFuture).get()

将返回"string",因为它首先完成,如果intFuture首先完成,它将返回1

 类似资料:
  • 来自javadocs, 如果任何给定的CompletableFutures异常完成,那么返回的CompletableFutures也会这样做,CompletionException将此异常作为其原因。 如果异常完成,则返回的CompletableFuture也会这样做,CompletionException将此异常作为其原因。 这是否意味着allOf()和anyOf()在任何Completable

  • 声明如下: 我是XSL的新手。我知道href属性需要URI,但是href值如何在上面的语句中解析为URI。此代码是DITA-OT中xhtml插件xsl的一部分。有多个这样的语句。这些是来自根目录的相对路径吗?DITA-OT代码如何解析这些路径?

  • 我想用Java 8-9启动线程,使用异步模式,这些是我的类和我的线程: 我有三根线。我的类包含单个方法 按以下方式设置我的%s: 正在创建线程: 最后,我的问题是我如何使用异步模式启动这三个线程。

  • 我似乎无法让这段代码发挥作用。我所做的是用2位数字的所有可能组合填充一个数组(每个数字分别代表一个形状和颜色)。然后,我尝试使用这个数组来填充一个2d数组,在其中我创建了前一个数组中包含的元素的所有可能的组合。出于某种原因,我的2d数组中填充了所有的“21”,而不是任何类型的组合。 如果需要的话,我可以把剩下的代码放在类中,但是它太长了。这个方法中的最后一个循环只是用来打印它们以供测试,之后会被删

  • 嗨,朋友们,我想知道我可以更改状态栏颜色还是使其完全透明。 我已经尝试了这么多,但我不能得到完全透明的状态栏,所以这里是我的代码.. v21/style.xml 和style.xml 我想要这样的.. 有人能帮忙吗?谢谢

  • 我有一个场景,其中我得到一个String消息列表,我必须遍历String并调用另一个方法,这是一个长时间运行的过程。然后我必须收集这个长时间运行过程的结果并连接结果并将其发送回用户交互界面。我对Scala中的这些未来概念很陌生。我正在使用Play框架,其中字符串列表将来自用户交互界面。这是我第一次尝试实现ht场景的样子: 为简单起见,long RunningCall将只返回一个字符串。稍后我将把它