ExecutorService
オブジェクトを実行しようとしたところFixedThreadPool
、問題が発生しました。
プログラムがナノ秒で実行されることを期待していましたが、ハングしました。Semaphore
キュー内のアイテムが合計されないように、それと一緒に使用する必要があることがわかりました。
プールのすべてのスレッドが使用されていることを知る方法はありますか?
基本コード...
static ExecutorService pool = Executors.newFixedThreadPool(4);
static Semaphore permits = new Semaphore(4);
try {
permits.acquire();
pool.execute(p); // Assuming p is runnable on large number of objects
permits.release();
} catch ( InterruptedException ex ) {
}
このコードはハングアップしますが、その理由は本当にわかりません。プールが現在すべてのスレッドが終了するのを待っているかどうかを知る方法は?