草庐IT

CompletableFuture

全部标签

Spring @Async 与 CompletableFuture

我对这段代码有疑问:@AsyncpublicCompletableFuturedoFoo(){CompletableFuturefooFuture=newCompletableFuture();try{StringfooResult=longOp();fooFuture.complete(fooResult);}catch(Exceptione){fooFuture.completeExceptionally(e);}returnfooFuture;}问题是:doFoo是否仅在longOp完成(正确或异常)之后才返回fooFuture并因此返回已经完成的future,还是Spring做

java - CompletableFuture<T> 类 : join() vs get()

get()类的join()和CompletableFuture方法有什么区别?下面是我的代码:Listprocess(){Listmessages=Arrays.asList("Msg1","Msg2","Msg3","Msg4","Msg5","Msg6","Msg7","Msg8","Msg9","Msg10","Msg11","Msg12");MessageServicemessageService=newMessageService();ExecutorServiceexecutor=Executors.newFixedThreadPool(4);ListmapResult=n

android - Android 支持库中的 CompletableFuture?

所以我今天将一个AndroidStudio项目迁移到Java8、AndroidAPI级别24和Jack工具链,以检查新功能,尤其是lambda和CompletableFuture。不幸的是,CompletableFuture似乎只能从API级别24开始使用(我对该项目的最低API级别是16)。您是否知道将CompletableFuture引入Android支持库的任何计划?它看起来像是Promises模式的一个很好的解决方案。 最佳答案 streamsupport项目提供了CompletableFuture的反向移植在其stream

java - CompletableFuture 跨微服务(JVM)

第1步:我想要一个CompletableFutureasyncFuture在microserviceA中开始通过saysupplyAsync运行异步任务.第2步:然后通过手动调用asyncFuture.complete(Tvalue)手动完成相同的future对象来自不同的微服务B,它会被一些异步事件触发。显然微服务A和微服务B有不同的JVM。实际上,微服务A和微服务B是运行在kubernetes中不同Pod上的同一微服务的不同实例。在第1步和第2步之间,future的对象将存储在Redis中,微服务B可以安全地检索它。快速谷歌搜索后,我想我会尝试以下几个解决方案:1>HazelCas

java - 线程与 CompletableFuture

将代码直接传递给线程与使用CompletableFuture相比有什么优势?Threadthread=newThread(()->{dosomething});thread.start();对比CompletableFuturecf1=CompletableFuture.runAsync(()->{dosomething}); 最佳答案 CompletableFuture.runAsync(...)在管理的forkJoin-Pool中运行Runnable,而newThread()创建您必须管理的新线程。“被管理”是什么意思,它是预先

java - CompletableFuture 已经完成但出现异常

CompletableFuture.completedFuture()返回一个已经用给定值完成的CompletedFuture。我们如何构造一个已经异常完成的CompletableFuture?意思是,我希望future抛出异常而不是返回值。 最佳答案 与Java9及更高版本不同,Java8没有为这种场景提供静态工厂方法。可以改用默认构造函数:CompletableFuturefuture=newCompletableFuture();future.completeExceptionally(exception);

java - 如何为 CompletableFuture::supplyAsync 选择执行器

CompletableFuture::supplyAsync(()->IO绑定(bind)查询)我如何为CompletableFuture::supplyAsync选择执行器以避免污染ForkJoinPool.commonPool()。Executors中有很多选项(newCachedThreadPool、newWorkStealingPool、newFixedThreadPool等)我读到了新的ForkJoinPoolhere如何为我的用例选择合适的? 最佳答案 你应该使用publicstaticCompletableFuture

java - 如何完成一个 CompletableFuture<Void>?

我想要一个仅表示完成的CompletableFuture(例如,我没有返回值)。我可以将CompletableFuture实例化为:CompletableFuturefuture=newCompletableFuture();但是我应该向complete方法中输入什么?比如我做不到future.complete(newVoid()); 最佳答案 正如您所注意到的,您不能像这样实例化一个Void对象。因为你不关心future的值(value),你可以用null完成它:future.complete(null);

java - JDK8 CompletableFuture.supplyAsync如何处理interruptedException

CompletableFuture.supplyAsync(()->{transporter.write(req);//heretakethevaluefromablockingqueue,willthrowainterruptedExceptionreturnresponseQueue.take();},executorService);常见的处理interruptedException的方法要么是再次中断要么直接抛出interruptedException,但是两者都行不通。有人知道吗? 最佳答案 我这样修改代码。Complet

java - CompletableFuture 与 flatMap 的等价物是什么?

我有这种奇怪的类型CompletableFuture>但我想要CompletableFuture.这可能吗?publicFutureconvert(byte[]htmlBytes){PhantomPdfMessagehtmlMessage=newPhantomPdfMessage();htmlMessage.setId(UUID.randomUUID());htmlMessage.setTimestamp(newDate());htmlMessage.setEncodedContent(Base64.getEncoder().encodeToString(htmlBytes));Com