可完成的未来调用并行方法3

时间:2018-02-21 14:43:59

标签: java java-8 completable-future

我最近在使用可填充的期货时遇到了内存不足的问题,因为发生了太多的垃圾收集,并且想确保我正确使用CompletableFutures。

我想要并行调用3个服务。现在我有以下内容:

final CompletableFuture<Void> f1 = runAsync(() -> m1.call(arg1, arg2, arg3));
final CompletableFuture<Void> f2 = runAsync(() -> m2.call(arg1, arg2, arg3, arg4));
final CompletableFuture<Void> f3 = runAsync(() -> m3.call(arg1, arg2, arg3));

然后我遍历期货并在每个期货上调用.get()。我还看到了以下例子:

final CompletableFuture<Void> completableFuture = CompletableFuture.allOf(
            CompletableFuture.runAsync(() -> m1.call(arg1, arg2, arg3)),
            CompletableFuture.runAsync(() -> m2.call(arg1, arg2, arg3),
            CompletableFuture.runAsync(() -> m3.call(arg1, arg2, arg3))
    );

然后调用.join()

解决这个问题的正确方法是什么?

错误我在其中一个可完成的期货上收到.get()行的积分。

java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
    at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)

0 个答案:

没有答案