java.lang.IllegalMonitorStateException异常抛出的解决方案

时间:2019-06-12
本文章向大家介绍java.lang.IllegalMonitorStateException异常抛出的解决方案,主要包括java.lang.IllegalMonitorStateException异常抛出的解决方案使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

   在做项目的时候,遇到一个java.lang.IllegalMonitorStateException异常抛出,经过断点调试以及资料搜索,得知这个问题,是在于wait()和notify(),这两个等待的方法上,需synchronized加锁方法进行同步,如此这个问题就这么简单的解决了。一下代码是我遇到问题的示例:

  没有synchronized加锁的情况,抛出该异常信息

	public void get() {
		// 如果flag=false
		if (!flag) {
			try {
			      this.wait();// 消费者等待
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 若是有的情况下,则消费者进行其购买
			System.out.println(this.num + this.type);
			// 如果flag为false,则已经卖完了
			flag = false;
			// 则等待生产者生产线程
			this.notify();
		}
	}
	

  加了synchronized的情况,得以解决

    public synchronized void get() {
        // 如果flag=false,则表示没有包子
        if (!flag) {
            try {
                  this.wait();// 消费者等待
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 若是有的情况下,则消费者进行其购买
            System.out.println(this.num + this.type);
            // 如果flag为false,则已经卖完了
            flag = false;
            // 则等待生产者生产线程
            this.notify();
        }
    }
    

原文地址:https://www.cnblogs.com/ztyc/p/11008677.html