码上敲享录 > java高并发常见问题 > 成功解决Exception in thread "main" java.lang.IllegalMonitorStateException

成功解决Exception in thread "main" java.lang.IllegalMonitorStateException

上一章章节目录下一章 2018-08-03已有8064人阅读 评论(0)

成功解决Exception in thread "main" java.lang.IllegalMonitorStateException

解决方法:

如果在非同步控制方法里调用java.util.concurrent.locks.Condition中的await()和signalAll()或者Object中的wait(),notify()和notifyAll()方法,程序能通过编译,但运行的时候,将得IllegalMonitorStateException异常。


以下代码就会报这个错误:

static volatile private ReentrantLock lock = new ReentrantLock();
static volatile private Condition condition =lock.newCondition();
static volatile private Boolean isWait=false;
private static void test() throws InterruptedException {  
condition.await();
}


修改代码,添加锁即可,修改如下(添加synchronized 关键字也可以):

static volatile private ReentrantLock lock = new ReentrantLock();
static volatile private Condition condition =lock.newCondition();
static volatile private Boolean isWait=false;
private static void test() throws InterruptedException {
lock.lock();//只有一个线程可以执行下面的代码
condition.await();
lock.unlock();
}

本文链接:http://www.yayihouse.com/yayishuwu/chapter/1404

向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交