Конечно, вы также можете просто использовать значение по умолчанию ExecutorService
, предоставленное CompletableFuture
, выполнив
filtered.forEach( track -> {
CompletableFuture.runAsync(new HeatmapAdderHelper( ... ) );
} );
В качестве примечания, это
while ( this.latch.getCount() != 0 )
{
this.publishValue( ( int ) this.latch.getCount() );
}
this.latch.await();
this.publishValue( ( int ) this.latch.getCount() );
выглядит очень хитроумно... занятой цикл в ожидании результатов?Кроме того, почему вы await
защелка после того, как вы уже ждали в цикле?Предполагая, что защелка CountDownLatch
.
Я уверен, что если бы вы предоставили еще больше контекста, мы могли бы дать лучшее общее решение.
Похоже, вы можете просто сделать что-то вроде
CompletableFuture<Void>[] futures =
filtered.stream().map(t -> new HeatmapAdderHelper(t))
.map(CompletableFuture::runAsync)
.toArray(CompletableFuture[]::new);
CompletableFuture.allOf(futures).andThen(createImage());
Илис CountDownLatch
:
CountDownLatch latch = new CountDownLatch(filtered.size());
filtered.forEach(f -> {
CompletableFuture.runAsync(new HeatmapAdderHelper(f))
.thenRun(latch::countDown);
});
latch.await();
createImage();