1

ExecutorServices を aでラップlisteningDecoratorしてListeningExecutorService. これが Guava チームの推奨事項であることは理解しており、常に価値があるようです。

ただし、ここで問題が発生しています。私のエグゼキューターは標準に基づいて不変でThreadPoolExecutorあり、そのスレッド プール サイズをアプリケーションに制御させたい (特に、アプリケーションをサポートする管理者に公開したい)。undecoratedThreadPoolExecutorでは、これを行うために必要なメソッドが公開されますが、ラッパーはデリゲートを私から隠しています。

ThreadPoolExecutorでは、をあきらめずに、によって公開された API に戻るにはどうすればよいでしょうlisteningDecoratorか。

私が持っていたいくつかのアイデアは次のとおりです。

  1. ListeningDecoratorデリゲートを公開する新規作成
  2. 装飾されたものだけでなくデリゲートへの参照を保持するExecutor
  3. への参照のみを保持し、要求されたThreadPoolExecutorときにのみラップします。ExecutorService
  4. デリゲートに自分の道を反映し、そこからスレッド プールのサイズを操作します。
4

1 に答える 1

2

グアバチームメンバーはこちら

ListeningThreadPoolExecutor基本的に aListeningDecoratorをラップするバリアントである新しいクラスを作成しますThreadPoolExecutorが、デリゲート自体を公開する代わりに、デリゲートに転送されるsetCorePoolSize(int size)からメソッドを公開します。ListeningThreadPoolExecutorThreadPoolExecutor

このアプローチは、オプション 1 よりもさらに少ない内部詳細を公開しますが、それが失敗した場合は、あなたが説明したようにオプション 1 にフォールバックします。

于 2012-04-19T18:21:13.553 に答える