4

Guava 同時実行ライブラリの使用方法を学ぶ必要がある宿題があります。

タスクにはいくつかのスレッド プールがあり、それぞれが個別のオブジェクトによって制御されます。

各プールには、単純なタスクを実行するいくつかの作業スレッドがあり (ほとんどの場合、 を使用して何かThread.sleep(long)をエミュレートします)、これらの単純なタスクはすべて、メッセージボードをエミュレートするコンテナー オブジェクトに格納されます。

各単純タスクには他のタスクの依存関係リストがあり、それらのタスクがすべて完了するまで実行できません。

ListenableFutureとを使用して Guava ライブラリを利用するにはどうすればよいFutures.chain()ですか?

オンラインで広範なサンプルコードを検索しましたが、使用方法を理解しているものは見つかりませんでした。

4

3 に答える 3

4

Louis が言及しているように、Futures.allAsListetc. はあなたにとって役立つと思います。Futures.chain ただし、それはあなたが説明する状況には有用で適切だと思います。これはあなたに挑戦するための課題なので、これ以上言うつもりはありません:Futures.chain別のタスクの完了時に実行するタスクを送信することができ、そのListenableFutureタスクの結果を表すnew を返します。それはあなたがやろうとしていることにどのように当てはまりますか?

于 2011-12-24T23:36:25.323 に答える
4

Guava ホームページにリンクされているGuava util.concurrentのプレゼンテーション スライドを読むことに興味があるかもしれません(スライド 11 以降)。ListenableFutureそれらは、私の理解と、なぜそれがとても役立つのかを具体化するのに本当に役立ちました.

私の推測では、あなたの課題の目標は、Future がどのように機能するか、および複数のタスクを調整するときにGuava がどのように使用ListenableFutureを簡素化するかを理解することです。Futures.chain()

ListenableFuture を使用する唯一のオープン ソース コードは、sitebricks-mailです。

使っているかどうかはわかりませんFutures.chain()が。

于 2011-12-25T00:10:38.633 に答える
2

主な問題がタスク依存関係リストの処理である場合、 Futures.chain() がここでの答えだとは思いません。可能性が高いのは、Futures.allAsList または Futures.successfulAsList です。これらは複数の Future を取り、すべての入力 Future が成功または失敗した後にのみ返される Future を返します。

于 2011-12-24T21:13:55.117 に答える