我正在尝试诊断生产问题。我在 Mac OS Lion 上设置了一个小测试程序,它启动 10 个线程(在同步块中使用 Executors.newCachedThreadPool(),它们都调用 MUTEX.wait())
然后我执行 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 状态,但实际上线程转储显示所有线程都已阻塞