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

Java8完整的未来

司空炯
2023-03-14

我的问题是如何使用Completable Future。

我有一个实现Callable的类。

public class Executor implements Callable<Collection>

早点用来做——

service.submit(collectorService);

这将返回未来

那么,当可调用线程完成时,我如何使用可完成的未来并调用一个函数说isDone()


共有3个答案

胥英奕
2023-03-14

如果我没理解错的话,你想知道如何提交一个“任务”(你之前的“执行人”),回馈一个CompletableFuture。

你通过打电话来做到这一点

CompletableFuture.supplyAsync(collectorService)

不同之处在于,您的“执行者”必须立即实现供应商,而不是可调用的

车峻熙
2023-03-14

您可以创建调用现有collectorService的lambda表达式。未来可完成的供应商lambda表达式。SupplySync将接受以下内容:

 Supplier<Collection> supplier = () -> collectorService.call();

并可与CompletableFuture一起使用,如下所示

  CompletableFuture.supplyAsync(() -> collectorService.call(),service)
         .thenApply(collection->isDone(collection);

正如其他人指出的,当collectorService.call()方法返回结果时,将在执行我们未来任务的同一线程上执行应用。使用ApplyAsync会将另一个任务重新提交给executor服务(原始性能要慢一个数量级,所以除非你也有充分的理由,否则不要这样做!).

方承弼
2023-03-14

给定一个可操作的未来

f.thenApply(result -> isDone(result));      // sync callback
f.thenApplyAsync(result -> isDone(result)); // async callback

...或者,如果你不需要这个结果:

f.thenRun(() -> isDone());
f.thenRunAsync(() -> isDone());

 类似资料:
  • 我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做

  • < code>doTask()是一个方法,如果< code>previousStepResult成功,则该方法执行某些操作,否则记录并按原样返回< code>previousStepResult。下面的代码工作正常,并且< code>conclude()也被执行,但是只有在没有异常(错误)的情况下。但是如果有异常(处理得很好),代码返回false。因此,在错误的情况下,下一步被称为罚款,如前所述,

  • 我有3个CompletableFutures,所有3个都返回不同的数据类型。 我希望创建一个结果对象,它是所有3个期货返回的结果的组合。 因此,我当前的工作代码如下所示: 我的问题是: > 这是处理返回不同结果类型的多个期货的正确方法吗? 在Acceptance Sync中构造ClassD对象是否正确?

  • 是否有一种方法可以尝试等待一段时间,然后返回不同的结果,而不取消超时后的未来? 我有一个服务(我们称之为),它跑出去做自己的事情。它返回一个结果: 我愿意[阻止并]等待它一小段时间(比方说2秒)。如果它没有完成,我希望返回一个不同的结果,但我希望服务继续做它自己的事情。然后查询服务是否完成(例如,通过websockets或其他方式)将是客户端的工作。 即。我们有以下几个案例: 花费%1 s并完成其

  • 用Java构建完整未来的最佳方式是什么?我已经实现了我自己的下面的< code>CompletedFuture,但希望像这样的东西已经存在。

  • 但API只返回值的一半。返回并且样式的剩馀部分被裁剪。 我试图提取可见性的值,但该方法没有返回样式的完整值。因此,我无法确定可见性的正确值。 我执行了 NEXTAG_STORES_DIV对应于id元素的xpath,通过xpath提取元素