java - 有谁知道我为什么会收到此 IllegalMonitorStateException?

标签 java concurrency

我有一个启动 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/

相关文章:

java - 如何配置 RabbitMQ 为多个消费者平等地提供多个队列

Bash:限制并发作业的数量?

java - 在此示例代码中怎么可能实例化接口(interface)?

java - Android ServerSocketChannel 绑定(bind)回环地址

java - 错误 "Required:String Found:String?"Kotlin 和 Android Studio

java - 如何在mapreduce驱动程序类中获取输入文件总大小?

python - 使用 asyncio.gather 时正确捕获 aiohttp TimeoutError

java - spring jpa - 获取具有 discriminatorType 的所有实体

java - 如何解析具有相同名称但不同级别的标签的 XML?

并发 - 实现信号量的监视器