特定の時点で、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 呼び出し用の大きなファイルを処理する