我有一堆方法在使用Phaser
(总是有 1 方),我可以通过使用来替换每种方法CompletableFuture
。结果是一样的。使用时有什么隐藏的好处CompletableFuture
吗?
例如:
带有 CompletableFuture 的版本 1:
void queryVersion1() {
var future = new CompletableFuture<Void>();
asyncCall(future);
future.join();
}
void asyncCall(CompletableFuture<Void> future){
...
future.complete(null);
}
带有 Phaser 的版本 2:
void queryVersion2() {
var phaser = new Phaser(1);
asyncCall(phaser);
phaser.awaitAdvance(0);
}
void asyncCall(Phaser phaser){
...
phaser.arriveAndDeregister();
}
我应该更喜欢哪一个,为什么?哪一个在内存/线程池/等方面表现更好。