概述
java.lang.IllegalMonitorStateException错误
发生异常的原因:
违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。
类比一个: 钱都没给我,让我给你买西瓜?强哥我不保熟
抛出异常的情况1:
当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;调用obj.notify()方法;调用obj.notifyAll()方法;
就是调用wait()和notify()或者notifyAll()的对象没有在同步方法(synchronized修饰的方法)或者同步代码块(synchronized(x){})中。
一切监视通知的方法都要在获得锁的情况下进行
抛出异常的情况2:
public void producePer01() throws InterruptedException {
int count = 0;
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
while(count != 0){
condition.await();
}
lock.lock();
try {
count++;
System.out.println(Thread.currentThread().getName()+ " -> "+ count);
condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
出问题的地方: 在没有获得锁的情况下,while循环里,使用了condition.wait();
最后
以上就是无私诺言为你收集整理的java.lang.IllegalMonitorStateException错误的全部内容,希望文章能够帮你解决java.lang.IllegalMonitorStateException错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复