当前位置: 首页 > 面试题库 >

创建已经完成的CompletableFuture的正确方法是什么

谭俊
2023-03-14
问题内容

我正在Java 8中使用Completable futures,并且我想编写一种方法,该方法基于接收到的参数并行运行多个具有副作用的任务,然后返回其“组合”
future(使用CompletableFuture.allOf()),或者什么都不做,然后返回已经完成的未来。

但是,allOf返回一个CompletableFuture<Void>

public static CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)

创建已知的已经完成的未来的唯一方法是使用completedFuture(),它需要一个值:

public static <U> CompletableFuture<U> completedFuture(U value)

返回一个已经用给定值完成的新CompletableFuture。

并且Void是无法实例化的,因此我需要另一种方法来创建type的已经完成的future CompletableFuture<Void>

做这个的最好方式是什么?


问题答案:

由于Void无法实例化,因此只能完成一个CompletableFuture<Void>带有null结果的a
,这恰好是您调用成功完成join()后返回的allOf()Future 时也会得到的结果。

所以你可以使用

CompletableFuture<Void> cf = CompletableFuture.completedFuture(null);

得到这样一个已经完成的未来。

但是你也可以使用

CompletableFuture<Void> cf = CompletableFuture.allOf();

表示结果不依赖任何作业。结果将完全相同。



 类似资料:
  • 我在java 8中使用Completable futures,我想写一个方法,根据收到的参数,或者并行运行多个具有副作用的任务,然后返回它们的“组合”未来(使用),或者什么都不做,返回一个已经完成的未来。 但是,返回一个

  • 我想知道在静态编程语言中创建全局常量的最佳方法是什么。Java,我们将使用一个包含常量的类,我们只需要导入这个类就可以访问所有常量。但是在静态编程语言中,有两种主要的方法: > 您可以创建一个包含所有常量的对象: 对象常量{const valCONST_1="foo"const valCONST_2="bar"const valCONST_3="toto"} 但这不是推荐的方式,正如一位语言开发者

  • 我是一个项目的一部分,我正在尝试添加TypeScript Web Server,这将与Swagger兼容。 什么是最基本的策略来实现它,考虑到容易的可运维性。 > 对于TypeScript,我注意到存在用于从TypeScript接口生成JSON模型的Tyson库。 对于Swagger,我尝试使用“Swagger node restify”库,因为它支持向Swagger添加JSON模型。 然而,我遇

  • 问题内容: 创建一个unique_ptr来保存在免费存储中分配的数组的正确方法是什么?Visual Studio 2013默认情况下支持此功能,但是当我在Ubuntu上使用gcc版本4.8.1时,会出现内存泄漏和未定义的行为。 可以使用以下代码重现该问题: Valgrind将给出以下输出: 问题答案: 使用专业化: 请注意,在理想情况下,不必显式使用实例化,从而避免了潜在的异常安全隐患。为此,C

  • 本文向大家介绍JavaScript探测CSS动画是否已经完成的方法,包括了JavaScript探测CSS动画是否已经完成的方法的使用技巧和注意事项,需要的朋友参考一下 不啰嗦上代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正