草庐IT

CompletableFuture

全部标签

java - Play Framework 2.5 JavaAsync 抛出 CompletionException

我正在使用Play2.5构建一个简单的应用程序。为了获得更好的性能,我将Akka分块响应与Java8CompletionStage策略结合使用。下面是生成分块响应的代码(不使用ComperableFuture时工作正常):@SingletonpublicclassAbstractSource{publicSourcegetChunked(Stringhtml){returnSource.actorRef(256,OverflowStrategy.dropNew()).mapMaterializedValue(sourceActor->{sourceActor.tell(ByteStri

java - CompletableFuture withFallback/只处理一些错误

我正在通过CompletableFuture接收来自服务调用的响应。我想处理服务返回的一些已知异常,例如乐观并发控制冲突。这是我得到的。有没有更好的不包装异常或使用SneakyThrows的方法?包装异常意味着其他异常处理程序必须检查因果链,而不是仅仅使用instanceof。someService.call(request).handle((response,error)->{if(error==null)returnCompletableFuture.completedFuture(response);elseif(errorinstanceofOCCException)retur

java - NonFatal 捕获 Throwable 可以吗?

据我了解,Java/JVM中的最佳实践规定您永远不应捕获Throwable直接,因为它涵盖了Error这恰好包含像OutOfMemoryError这样的东西和KernelError.一些引用here和here.但是在Scala标准库中,有一个提取器NonFatal被广泛推荐(并被Akka等流行库广泛使用)作为catch中的最终处理程序(如果需要的话)block。正如所怀疑的那样,这个提取器恰好捕获了Throwable如果它是fatalerror之一,则重新抛出它。查看代码here.这可以通过一些反汇编的字节码进一步证实:问题:我在第一段中所做的假设是否正确?还是我假设抓不到Throwa

Java 8 CompletableFuture 与 Netty Future

JDK8中引入的CompletableFuture与Netty提供的io.netty.util.concurrent.Future相比如何?Netty文档提到了这一点JDK8addsCompletableFuturewhichsomewhatoverlapsio.netty.util.concurrent.Futurehttp://netty.io/wiki/using-as-a-generic-library.html我试图获得答案的问题是:他们的相同点和不同点是什么?两者的性能特征有何不同?哪一个能够更好地扩展?关于相同点/不同点,我已经能够提出以下几点:相似点:与JavaFutu

java - 何时使用 CompletableFuture 的非异步方法?

我(大部分)理解CompletableFuture的三种执行方式:非异步(synchronousexecution)默认异步(异步使用默认执行器)自定义异步(使用自定义执行程序的异步)我的问题是:什么时候应该赞成使用非异步方法?如果您有一个代码块调用其他也返回CompletableFuture的方法,会发生什么情况?这在表面上看起来可能很便宜,但如果这些方法也使用非异步调用会怎样?这不会加起来成为一个可能变得昂贵的长非异步block吗?是否应该将非异步执行的使用限制在不调用其他方法的简短、定义明确的代码块中? 最佳答案 Whensh

强大的异步任务处理类CompletableFuture使用详解

环境:Java8在Java8中,新增加了一个CompletableFuture类,该类提供了差不多50个左右的方法(都是用来完成各种异步场景需求),并且结合了Future的优点(继承自Future类),提供了比Future更为强大的功能,这使得在异步编程方面变的简单,同时还提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的各种方法。Future基本应用Future是从JDK1.5开始有的,目的是获取异步任务执行的结果,通常情况会结合ExecutorService及Callable一起使用。1.Future结合Callable使用单任

java - ForkJoinTask 与 CompletableFuture

在Java8中有两种启动异步计算的方法-CompletableFuture和ForkJoinTask.它们看起来都非常相似-CompletableFuture的内部类甚至扩展ForkJoinTask.是否有理由使用一个而不是另一个?我能看到的一个关键区别是CompletableFuture.join方法简单地阻塞直到future完成(waitingGet只是使用ManagedBlocker旋转),而ForkJoinTask.join可以从队列中窃取工作以帮助您完成正在加入的任务。两者之间有什么好处吗? 最佳答案 它们是两个不同的东西

java - 使用带有 CompletableFuture 的默认公共(public) fork/join 池进行长阻塞调用是不好的做法吗?

假设我有一个CompletableFuture,它包装了一个阻塞调用,例如使用JDBC查询后端。在这种情况下,由于我没有将任何执行程序服务作为参数传递给CompletableFuture.supplyAsync(),因此通过后端获取资源的实际阻塞工作应该由公共(public)Fork/Join池中的线程完成。不是吗badpractice让来自公共(public)FJpool的线程执行阻塞调用?我在这里的优势是我的主线程没有阻塞,因为我委托(delegate)异步运行的阻塞调用。检查正在阻塞的abtJDBC调用here.如果这个推断是正确的,为什么可以选择将默认的公共(public)FJ

java - 并行化 REST 调用的最佳方式是什么?

我正在处理一些处理多个REST调用的java代码call1()call2()call3()...我想并行执行这些调用,但同步执行我的主要代码。我用lamba和并行流制作了一个POC:Listlist=newArrayList();list.add(()->{call1()});list.add(()->{call2()});list.add(()->{call3()});list.add(...);list.parallelStream().forEach(Runnable::run);您有其他解决方案吗?我还检查了使用来自Jersey客户端的异步调用,但这需要更多代码更改。

java - 在测试中模拟 CompletionException

我有一个HttpClient类,它有一个返回CompletableFuture的函数:publicclassHttpClient{publicstaticCompletableFuturegetSize(){CompletableFuturefuture=ClientHelper.getResults().thenApply((searchResults)->{returnsearchResults.size();});returnfuture;}}然后另一个函数调用这个函数:publicclassCaller{publicstaticvoidcaller()throwsExcepti