生産上の問題を診断しようとしています。Mac OS Lionで、10個のスレッドを起動する小さなテストプログラムをセットアップしました(同期ブロックですべてMUTEX.wait()を呼び出すExecutors.newCachedThreadPool()を使用)
次に、kill -3を実行してスレッドダンプを取得すると、すべてのスレッドがBLOCKEDと表示されます。これらはすべて待っているべきではありませんか?
コードは次のようなものです(簡潔にするために導入されたコードの臭いはご容赦ください)
ExecutorService executor = Executors.newCachedThreadPool();
final Object MUTEX = new Object();
for(int i = 0; i < 10; i++) {
executor.execute(new Runnable() {
public void run() {
synchronized(MUTEX) {
MUTEX.wait();
} } }}
この時点で、すべてのスレッドはWAITING状態になっているはずですが、実際には、スレッドダンプはすべてがブロックされていることを示しています。