completable-future 相关问题

在Java 8中,可以显式完成的Future(设置其值和状态),并且可以包括在完成时触发的依赖函数和动作。

单元测试 CompletableFuture 异常

这是我的第一篇文章,我是 CompletableFuture 的初学者,我想在使用 CompletableFuture.get() 时测试异常(InterruptedException 和 TimeoutException)。 我的代码: 完整的未来...

回答 1 投票 0

Arjuna,表示一个动作用多个线程完成,并且其中一个线程正在进行中

我有这个应用程序,使用 applyAsync 方法我从其他服务获取数据,然后尝试保存在我们的数据库中,这个过程可以同时完成,我的意思是我请求数据它开始工作...

回答 1 投票 0

CompletableFuture.supplyAsync() 是否多余,以防它不修改传入值?

在并发编程课程中,我遇到了以下示例代码: @测试 void PromiseTestCompose2() 抛出异常 { CompletableFuture future1 = CompletableFuture .

回答 1 投票 0

CompletableFuture.supplyAsync() 在不修改传入值的情况下是否冗余

在学习并发编程课程时,我遇到了以下示例代码: @测试 void PromiseTestCompose2() 抛出异常 { CompletableFuture future1 = CompletableFuture .

回答 1 投票 0

CompletableFuture 的误解

我似乎在 CompletableFuture 的一个看似简单的示例中惨遭失败。 我有一个 CompletableFuture 被阻塞在不同的线程中,如下所示: 供应商 我似乎在一个看似简单的例子中惨败,CompletableFuture。 我有一个 CompletableFuture 被阻塞在不同的线程中,例如: Supplier<CompletableFuture<String>> one = () -> CompletableFuture.supplyAsync(() -> { System.out.println("started cf"); LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(3)); System.out.println("done cf"); return ""; }); ExecutorService service = Executors.newSingleThreadExecutor(); service.submit(() -> { try { future = one.get(); future.get(); } catch (Exception e) { System.out.println("caught"); future.completeExceptionally(e); } }); 我希望能够cancel它,然后join等待它在与上面的线程不同的线程中完成,所以像这样: static CompletableFuture<String> future; public static void main(String[] args) { Supplier<CompletableFuture<String>> one = () -> CompletableFuture.supplyAsync(() -> { System.out.println("started cf"); LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(3)); System.out.println("done cf"); return ""; }); ExecutorService service = Executors.newSingleThreadExecutor(); service.submit(() -> { try { future = one.get(); future.get(); } catch (Exception e) { System.out.println("caught"); future.completeExceptionally(e); } }); LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1)); future.cancel(true); System.out.println("before join"); String s = future.join(); System.out.println("s value : " + s); System.out.println("done"); } 令我惊讶的是,这个String s = future.join();会阻塞,我不明白为什么。 更令人惊讶的是,如果我将代码更改为(而不是String s = future.join();): String s = null; try { s = future.join(); } catch(Exception e) { System.out.println("here : " + e.getClass()); } 这个不会阻塞。有人可以在这里解释一下吗? 无论有或没有 try/catch 周围的 future.join() 这对我来说都是以同样的方式阻塞的,我在这里将“阻塞”定义为:我将代码放入文件中,从命令行运行它,并且该过程不会完成. 原因是 Executors.newSingleThreadExecutor() 使用非守护线程,这意味着即使 main() 方法返回,池的线程也会继续运行(您应该看到“完成”输出)。因此程序的进程没有完成。 你也可以 在 service.shutdown() 或 之前调用 future.join() 或其一些变体 使用变体 newSingleThreadExecutor(ThreadFactory),其中线程工厂提供守护线程 (.setDaemon(true))

回答 1 投票 0

CompletableFuture.allof() 获取空指针异常

我的结构类似于下面的代码块。不知何故,我在 CompletableFuture.allOf 方法中得到 nullpointerException: 这里可能有什么问题? 谢谢.. 列表 我的结构类似于下面的代码块。不知何故,我在 CompletableFuture.allOf 方法中得到 nullpointerException: 这里可能有什么问题? 谢谢.. List<CompletableFuture<String>> completableFutures = new ArrayList<>(); for(Classx list : request.getlist()) { switch (list.getCases()) { case 1: completableFutures.add(asyncProcess(list)); break; case 2: completableFutures.add(asyncProcess2(list)); break; } } CompletableFuture<Void> allFutures = CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])); @Async public CompletableFuture<String> asyncProcess(Classx list) { try{ //..some codes } catch(Exception e){ //..some codes } return CompletableFuture.completedFuture(x.getX()); } @Async public CompletableFuture<String> asyncProcess2(Classx list) { try{ //..some codes } catch(Exception e){ //..some codes } return CompletableFuture.completedFuture(x.getX()); } 错误信息是: java.lang.NullPointerException at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1306) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1305) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.andTree(CompletableFuture.java:1303) at java.util.concurrent.CompletableFuture.allOf(CompletableFuture.java:2225) 当我按如下方式更改代码时,它会引发相同的错误。 CompletableFuture allFutures = CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[completableFuture.size()])); 查看CompletableFutre.andTree的源代码,似乎当传入数组的元素为null时抛出此异常。在您的 return 函数之一中必须有一些额外的 asyncProcees 语句可以返回 null。

回答 1 投票 0

为什么 thenAccept 在循环中不起作用?

在使用 CompletableFutures 时,我发现了这些我无法理解的输出。我将分享两个在我看来应该表现相同的片段。但他们不是。 所以

回答 1 投票 0

如何增强CompletableFuture Join性能

我在java项目中工作,我使用ResTemplate调用rest api,我使用CompletableFuture进行并行调用,这是我的代码: 列表>

回答 1 投票 0

如何加快并行列表处理速度

我正在尝试解决一个问题:有一个字符串列表,每个字符串必须单独处理。每个字符串的处理时间大约为 40-50 ms,如果列表中有 200 个字符串,那是 ar...

回答 1 投票 0

了解Java并发

我正在底层学习java并发,我读过一些关于多线程和并发的java文章和视频,但似乎无法将它们全部放在一起 这是…的要点...

回答 1 投票 0

CompletableFuture 未按预期工作并且具有更多数量的额外线程

我正在尝试并行化以下操作,即在每次迭代中通过分页获取具有 50000 条记录的所有记录,并将它们写入 s3 文件上的 CSV 文件中。 并行之前: 噗...

回答 1 投票 0

Java8 CompletableFuture.get(long timeout, TimeUnit unit)没有及时返回

我假设所有任务都会在 1000 毫秒后超时,但实际上并非如此。 它打印如下,这是如何发生的。 未来0 java.util.concurrent.TimeoutException 1010 未来1 java.util.conc...

回答 1 投票 0

将参数传递给供应商的最佳方式,例如为了完整的未来?

抱歉,我很确定肯定已经有人问过类似的问题,但我就是找不到答案。 比如说,有一个服务类 ChessEngineService 它有一个实例方法: 字符串

回答 1 投票 0

集成测试的奇怪问题

@Sql 在测试类 插入bankdemo.bills(id, is_active, 余额, 货币, account_id) 值('0', '1', '0.00', 'RUB', '0'); 绿色测试显示数据库中存在 id == 0 的 Bill @Te...

回答 1 投票 0

无法在同一个类的对象上调用类CompletableFuture的静态方法supplyAsync! CompletableFuture c=new CompletableFutre; c 失败

在JAVA CompletableFuture中是一个类,其中包含一个名为supplyAsync()的静态方法,我可以使用CompletableFuture.supplyAsync()模式调用这个静态方法,但我无法调用静态方法

回答 1 投票 0

CompletableFuture 事务回滚

给出这段代码: @异步 @事务性 公共 CompletableFuture> newBundle(字符串名称){ 返回 CompletableFuture.supplyAsync(() -> { 捆绑新捆绑 =

回答 1 投票 0

Java 中的 CompletableFuture 导致 ThreadLocal 上下文丢失

我有一个类DatabaseContextHolder,它使用ThreadLocal根据用户的API密钥管理数据源。 公共最终类DatabaseContextHolder { 私有静态最终ThreadLocal<

回答 1 投票 0

Java 异步代码中的屈服控制

我有 Rust/C#/Javascript 异步编程背景,并试图理解类似的 Java 习惯用法。具体来说,我想了解是否存在“绿色线程&

回答 2 投票 0

我可以多次提交给同一个单线程执行器吗?

我有一个代码块,应该使用 CompletableFuture 和 ExecutorService 在不同线程上并行运行。该代码块发出网络请求(使用 RetroFit),并等待每个

回答 1 投票 0

使用 CompletableFutures 和 Java 时的 PlayFramework 自定义执行器

在最新版本的 PlayFramework 中,他们开始使用 CompletionStage 作为用于异步执行的控制器的返回类型,或者简而言之,如果您返回 CompletionStage,则它是

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.