web-dev-qa-db-ja.com

Listenablefuture vs Completablefuture

私は一生懸命努力しましたが、ListenableFutureCompletableFutureを明確に比較し、優れた分析を提供する記事やブログは見つかりませんでした。

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

44
Ashutosh Jha

ListenableFutureCompletableFutureの両方は、親クラス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()の呼び出しから受け取った値にパラメーター値が設定されます。

CompletableFutureについて読む

38
Livia Moroianu