私は一生懸命努力しましたが、ListenableFuture
とCompletableFuture
を明確に比較し、優れた分析を提供する記事やブログは見つかりませんでした。
だから、誰かがそのようなブログや記事を説明したり教えてくれたりできれば、それは私にとって本当に良いことです。
ListenableFutureとCompletableFutureの両方は、親クラスFuture非同期アクションが完了したときに、呼び出し側が何らかの方法でコールバックを「登録」できるようにすることにより。
Futureでこれを行うことができます:
_ExecutorService executor = ...;
Future f = executor.submit(...);
f.get();
_
f.get()
は、非同期アクションが完了するまでブロックされます。
ListenableFutureを使用すると、次のようなコールバックを登録できます。
_ListenableFuture listenable = service.submit(...);
Futures.addCallback(listenable, new FutureCallback<Object>() {
@Override
public void onSuccess(Object o) {
//handle on success
}
@Override
public void onFailure(Throwable throwable) {
//handle on failure
}
})
_
CompletableFutureを使用すると、タスクの完了時にコールバックを登録することもできますが、ListenableFuture完了させたい任意のスレッドから完了できるという点。
_CompletableFuture completableFuture = new CompletableFuture();
completableFuture.whenComplete(new BiConsumer() {
@Override
public void accept(Object o, Object o2) {
//handle complete
}
}); // complete the task
completableFuture.complete(new Object())
_
タスクでスレッドの呼び出しが完了すると、タスクがまだ完了していない場合、get()の呼び出しから受け取った値にパラメーター値が設定されます。