我有一个集成测试,启动getty,然后它启动一个Web应用程序.Web应用程序将跨越一些将运行初始化任务的异步线程.之后就可以进行测试了.现在,因为我要等待其中一个任务完成,我想把静态监视器放在共享类中:
private static Object bootstrapDone = new Object();
Run Code Online (Sandbox Code Playgroud)
使用以下访问方法:
public static void signalEsBoostrapCompleted(){
synchronized (bootstrapDone){
bootstrapDone.notifyAll();
}
}
public static void waitEsBoostrapCompleted() throws InterruptedException {
synchronized (bootstrapDone){
bootstrapDone.wait(20000);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在测试中运行它,我会得到:java.lang.Object.notifyAll(Native Method)中的线程"Thread-11"java.lang.IllegalMonitorStateException异常
从notifyAll所在的行.我不知道为什么会这样.有人可以帮忙吗?
bootstrapDone我能想到的唯一明显的方法是:在调用synchronized(bootstrapDone)和 调用之间,有东西正在改变另一个线程上的值bootstrapDone.notifyAll()。
进行bootstrapDone最终处理后,任何无法再编译的内容都可能是罪魁祸首。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |