草庐IT

CompletableFuture

全部标签

java - 在 RxJava 中超时取消任务

我正在试验RxJava和Java8的CompletableFuture类并且不太了解如何处理超时情况。importstaticnet.javacrumbs.futureconverter.java8rx.FutureConverter.toObservable;//...ObservabledoSomethingSlowly(){CompletableFuturetask=CompletableFuture.supplyAsync(()->{//thiscallmaybeveryslow-ifittakestoolong,//wewanttotimeoutandcancelit.ret

java - CompletableFuture recoverWith 等效?即异常但返回 CompletableFuture<U>

我没有看到处理具有异步结果的异常的明显方法。例如,如果我想重试一个异步操作,我会期待这样的事情:CompletionStagecf=askPong("causeerror").handleAsync((x,t)->{if(t!=null){returnaskPong("Ping");}else{returnx;}});askPong询问Actor的地方:publicCompletionStageaskPong(Stringmessage){FuturesFuture=ask(actorRef,message,1000);finalCompletionStagecs=toJava(sFu

java - 递归取消 allOf CompletableFuture

如果我有CompletableFuturefuture1=service.request(param1);CompletableFuturefuture2=service.request(param2);CompletableFuturemany=CompletableFuture.allOf(future1,future2);当我执行many.cancel()时会发生什么?future1和future2也会取消吗?如果没有,实现这一目标的最干净的方法是什么?我不愿意坚持future1和future2,只是为了能够在我想取消many时取消它们。关于我为什么想要这个的一些背景:当接收到一

使用 CompletableFuture 处理 Java 8 供应商异常

考虑以下代码publicclassTestCompletableFuture{BiConsumerbiConsumer=(x,y)->{System.out.println(x);System.out.println(y);};publicstaticvoidmain(Stringargs[]){TestCompletableFuturetestF=newTestCompletableFuture();testF.start();}publicvoidstart(){SuppliernumberSupplier=newSupplier(){@OverridepublicIntegerg

java - 为什么 Java 8 CompletableFuture thenCompose 根据完成顺序生成不同的异常?

我遇到了Java8CompletableFuturethenCompose方法的奇怪行为。我有两个测试,只是执行顺序不同。这两个测试都模拟了thenCompose中生成的CompletableFuture中的失败。@TestpublicvoidcompletedAfter(){CompletableFuturefuture1=newCompletableFuture();CompletableFuturefuture2=newCompletableFuture();future1.thenCompose(x->future2).whenComplete((r,e)->System.ou

java - 为什么 CompletableFuture allOf 方法会进行二分查找?

我想知道CompletableFuture的allOf方法是否进行轮询或进入等待状态,直到所有CompletableFutures都传递给该方法完成他们的执行。我查看了IntelliJ中的allOf方法的代码,它正在执行某种二进制搜索。请帮助我找出CompletableFuture的allOf方法实际上做了什么。publicstaticCompletableFutureallOf(CompletableFuture...cfs){returnandTree(cfs,0,cfs.length-1);}/**Recursivelyconstructsatreeofcompletions.*

java - java-8 CompletableFuture 回调调用的不合理延迟

第一个回调调用非常快,其余的延迟约50毫秒(非累加),我不知道为什么。publicclassCfTest{finalstaticlongt0=System.nanoTime();publicstaticvoidmain(String[]args){CompletableFuturecf1=CompletableFuture.supplyAsync(()->{sleep(2000);return100;});CompletableFuturecf2=CompletableFuture.supplyAsync(()->{sleep(1000);return1L;});Completable

java - 取消一个 CompletableFuture 链

我有一个我想取消的异步服务调用链。好吧,实际上,我有两个并行进行的服务调用链,如果一个成功,我想取消另一个。对于guava的future,我习惯于通过取消最后一个future来取消整个future链。看来我不能用java-8的future来做到这一点。除非有人知道怎么做。你的任务,如果你选择接受它,是告诉我是否可以保持我漂亮的语法并取消链。否则,我将编写自己的链接future包装器-特别是在thisquestion之后.下面是我自己的测试和尝试。@TestpublicvoidshouldCancelOtherFutures(){//guavaListenableFutureas=Fut

java - 即使抛出异常,如何迭代流?

stream.map(obj->doMap(obj)).collect(Collectors.toList());privateStringdoMap(Objectobj){if(objectIsInvalid){thrownewParseException("Objectcouldnotbeparsed");}}问题:我如何抛出异常并让流迭代知道它不应该中断整个迭代,而是继续下一个元素(并最终记录失败的对象)? 最佳答案 这里有一个奇怪的技巧可以用来改进异常处理。假设您的映射器函数是这样的:StringdoMap(Objectob

多线程系列(二十) -CompletableFuture使用详解

一、摘要在上篇文章中,我们介绍了Future相关的用法,使用它可以获取异步任务执行的返回值。我们再次回顾一下Future相关的用法。publicclassFutureTest{publicstaticvoidmain(String[]args)throwsException{longstartTime=System.currentTimeMillis();//创建一个线程池ExecutorServiceexecutor=Executors.newFixedThreadPool(1);//提交任务并获得Future的实例Futurefuture=executor.submit(newCallab