5

我有一个启动 getty 的集成测试,然后它又启动一个 Web 应用程序。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);
    } 
}

如果我在测试中运行它,我会得到: java.lang.Object.notifyAll(Native Method) 线程“Thread-11”java.lang.IllegalMonitorStateException 中的异常

从 notifyAll 所在的行开始。我不知道为什么会这样。任何人都可以帮忙吗?

4

1 回答 1

2

我能想到的唯一可能的明显方法是:在调用 to和 callbootstrapDone之间,某些东西正在改变另一个线程上的值。synchronized(bootstrapDone)bootstrapDone.notifyAll()

Make bootstrapDonefinal 任何无法编译的东西都可能是罪魁祸首。

于 2013-10-14T17:43:41.493 回答