1

特定の時点で、実行を待機しているランナブルの数を知る方法はありますかExecutorService? たとえば、ループが runnable が完了するよりも速く execute メソッドを呼び出しており、余剰が蓄積されていると仮定すると、蓄積された runnable の実行中のカウントを取得する方法はありますか?

ExecutorService es = Executors.newFixedThreadPool(50);

while (test) {
    es.execute(new MyRunnable());
}
4

2 に答える 2

4

特定の時点で、ExecutorService による実行を待機しているランナブルの数を知る方法はありますか。

はい。Executors...呼び出しを使用する代わりに、独自の をインスタンス化する必要がありますThreadPoolExecutor。以下は、Executors.newFixedThreadPool(50)が返すものです。

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(50, 50,
           0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());

を取得すると、プールに関するデータを提供ThreadPoolExecutorする多数の getter メソッドが含まれます。未処理のジョブの数は次のとおりです。

threadPool.getQueue().getSize();

以下からも利用できますThreadPoolExecutor

  • getActiveCount()
  • getCompletedTaskCount()
  • getCorePoolSize()
  • getLargestPoolSize()
  • getMaximumPoolSize()
  • getPoolSize()
  • getTaskCount()

キュー内のジョブの数を調整して先に進みすぎないようにする場合は、境界付きBlockingQueueと. を使用する必要がありますRejectedExecutionHandler。ここで私の答えを参照してください: Java で HTTP 呼び出し用の大きなファイルを処理する

于 2013-09-24T15:26:36.613 に答える