我有一个启动 getty 的集成测试,它又启动了一个网络应用程序。 Web 应用程序将跨越一些将运行初始化任务的异步线程。之后就可以进行测试了。现在,因为我必须等待其中一项任务完成,所以我想到将静态监视器放在共享类中:
private static Object bootstrapDone = new Object();
使用以下访问器方法:
public static void signalEsBoostrapCompleted(){
synchronized (bootstrapDone){
bootstrapDone.notifyAll();
}
}
public static void waitEsBoostrapCompleted() throws InterruptedException {
synchronized (bootstrapDone){
bootstrapDone.wait(20000);
}
}
如果我在测试中运行它,我会得到: 线程“Thread-11”中的异常 java.lang.IllegalMonitorStateException 在 java.lang.Object.notifyAll(本地方法)
来自 notifyAll 所在的行。我不知道为什么会这样。 谁能帮忙?
最佳答案
我能想到的唯一可能的明显方法是:在调用 synchronized(bootstrapDone)
和调用 bootstrapDone.notifyAll()
。
将 bootstrapDone
设为最终版本,任何无法再编译的都可能是罪魁祸首。
关于java - 有谁知道我为什么会收到此 IllegalMonitorStateException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365773/