1. ホーム
  2. java

ListenablefutureとCompletablefutureの比較

2023-10-26 10:36:33

質問

を明確に比較した記事やブログは見つかりませんでした。 ListenableFutureCompletableFuture であり、良い分析を提供しています。

だから、誰かがそのようなブログや記事を説明したり、指し示すことができれば、それは私にとって本当に良いことです。

どのように解決するのですか?

どちらも ListenableFuture 補完可能な未来 はその親クラスである 未来 は、呼び出し元が非同期アクションが完了したときに呼び出されるコールバックを何らかの方法で登録できるようにすることで、親クラスである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
                }
            })

とは 補完可能な未来 を使えば、タスクが完了したときのコールバックを登録することもできます。 タスクが完了したときのコールバックも登録できますが 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()の呼び出しから受け取った値がパラメータの値として設定されます。

CompletableFutureについて読む