- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在做
CompletableFuture.anyOf(manyfutures).thenRun( new Runnable() { } }
但是runnable中的代码只运行一次!我预计它会运行很多次,每次任何 future 完成时。
如何在每次任何 future 完成时运行一段代码?以最佳方式,这意味着这是行不通的:
public static void append(final CompletableFuture[] futures, Runnable runnable) {
for (CompletableFuture future : futures) {
future.thenRun(runnable);
}
}
编辑
我正在使用 ThreadPoolExecutor,当执行 X 个可运行对象时,我想向其追加更多工作。
有没有办法倾听这种情况并在发生这种情况时提供更多工作?
另一种选择是我在一开始就堆叠数千项工作,但这也不是最佳选择。
我在做
... queue = new LinkedBlockingQueue<Runnable>();
new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, queue);
最佳答案
看看 JavaDoc
Returns a new
CompletableFuture
that is completed when any of the givenCompletableFutures
complete, with the same result. Otherwise, if it completed exceptionally, the returnedCompletableFuture
also does so, with aCompletionException
holding this exception as its cause. If noCompletableFutures
are provided, returns an incompleteCompletableFuture
.
当任何给定的 CompletableFutures
时,该方法返回完全的。即第一个。一个方法不能多次返回。
在每个之后运行一个操作CompletableFuture
只需调用theRun
或thenRunAsync
每个 CompletableFuture
.
如果您有 List<CompletableFuture<T>>
你想要一个CompletableFuture<List<T>>
,即您想要将 future 集合“展开”为集合的 future,您可以使用以下技巧:
private static <T> CompletableFuture<List<T>> sequence(List<CompletableFuture<T>> futures) {
final CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
return allDoneFuture.thenApply(v ->
futures.stream().
map(future -> future.join()).
collect(toList())
);
}
关于Java CompletableFuture.anyOf(manyfutures).thenRun( runnable ) 只运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27462465/
假设我有这个示例代码,并且在 runAsync 中遇到异常。我的问题是这个异常是否会阻止 thenRun 被执行,因为 thenRun 与此代码的调用者方法在同一线程中运行。 private void
我在做 CompletableFuture.anyOf(manyfutures).thenRun( new Runnable() { } } 但是runnable中的代码只运行一次!我预计它会运行很多
在下面的代码中,调用 thenRunAsync 有什么不同吗?我应该改为调用 thenRun 吗? CompletableFuture.runAsync(this::doWork , executor
我是一名优秀的程序员,十分优秀!