我是靠谱客的博主 无私诺言,最近开发中收集的这篇文章主要介绍java.lang.IllegalMonitorStateException错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部