У меня есть куча методов, использующих Phaser
(с всегда 1 стороной), и я мог бы заменить каждый метод, используя CompletableFuture
. Результат будет таким же. Есть ли какие-то скрытые преимущества при использовании CompletableFuture
?
Например:
версия 1 с CompletableFuture:
void queryVersion1() {
var future = new CompletableFuture<Void>();
asyncCall(future);
future.join();
}
void asyncCall(CompletableFuture<Void> future){
...
future.complete(null);
}
версия 2 с Phaser:
void queryVersion2() {
var phaser = new Phaser(1);
asyncCall(phaser);
phaser.awaitAdvance(0);
}
void asyncCall(Phaser phaser){
...
phaser.arriveAndDeregister();
}
Какой из них я предпочитаю и почему? Какой из них работает лучше с точки зрения памяти / пула потоков / et c.