错误记录一:线程通信时抛出Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常

完整异常:

Exception in thread “Thread-0” java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at com.liang.Test3.Restaurant.run(Restaurant.java:64)

异常代码

//设置线程任务:生产包子@Overridepublic void run() {//定义一个变量int count = 0;while(true){//保证线程任务只有一个在执行synchronized (bread){//对包子状态进行判断if(bread.flag == true){//包子铺调用wait方法进入等待状态try {bread.wait();} catch (InterruptedException e) {e.printStackTrace();}}//被唤醒后执行,包子铺生产包子//交替生产两种包子if(count %2 == 0){//生产bread.pi = "薄皮";bread.xian = "三鲜";}else {bread.pi = "冰皮";bread.xian = "牛肉大葱馅";}}count ++;System.out.println("包子铺正在生产"+bread.pi+bread.xian+"包子");//生产包子要三秒try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}bread.flag = true;bread.notify();System.out.println(bread.pi+bread.xian+"的包子做好了,可以开吃");}}

异常出现的原因

违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。

object类中wait()和notify()方法使用规律

1.当前线程”在调用wait()/notify()时,必须拥有该对象的同步锁。

2.使用时要在同步代码块中使用。

观察可以知道

count ++;System.out.println("包子铺正在生产"+bread.pi+bread.xian+"包子");//生产包子要三秒try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}bread.flag = true;bread.notify();System.out.println(bread.pi+bread.xian+"的包子做好了,可以开吃");

这一部分代码不在同步代码块中,**使得 bread.notify();**找不到相应的锁对象,从而报错。

异常修复

@Overridepublic void run() {//定义一个变量int count = 0;while(true){//保证线程任务只有一个在执行synchronized (bread){//对包子状态进行判断if(bread.flag == true){//包子铺调用wait方法进入等待状态try {bread.wait();} catch (InterruptedException e) {e.printStackTrace();}}//被唤醒后执行,包子铺生产包子//交替生产两种包子if(count %2 == 0){//生产bread.pi = "薄皮";bread.xian = "三鲜";}else {bread.pi = "冰皮";bread.xian = "牛肉大葱馅";}count ++;System.out.println("包子铺正在生产"+bread.pi+bread.xian+"包子");//生产包子要三秒try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}bread.flag = true;bread.notify();System.out.println(bread.pi+bread.xian+"的包子做好了,可以开吃");}}}

运行结果

解决错误参考的博客:
https://blog.csdn.net/flower_vip/article/details/54913339

错误记录一:线程通信时抛出Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常相关推荐

  1. linux的android工作室,Android工作室在启动时抛出错误,linux机器

    我只是将我的Android Studio从1.5升级到2.3,我只是解压缩文件夹并复制到下载文件夹中,现在当我启动android studio时,我收到了此消息:Android工作室在启动时抛出错误, ...

  2. 解决oracle数据库的表中存在异常日期值在查询时抛出ora-01841错误的办法

    生产环境的服务器上,在查询时抛出SQLDataException,错误代码为ora-01841 ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0 经排查是 ...

  3. AES加密时抛出java.security.InvalidKeyException:#160;Illegal#160;key#160;size#160;or#160;def...

    原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def 使用AES加密时,当密钥大于128时,代码会抛出 java. ...

  4. PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决

    PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决 参考文章: (1)PHP 安装 扩展时 抛出 /usr/local/Cellar/ph ...

  5. android 数组指针异常,Android JSON解析Json数组是[]在解析时抛出空指针异常,如何以正确的方式写入?...

    我有复杂的API,我解析并显示在列表视图中,我将努力解析JSONArray.Here我将在斗争之后Json数组这是在帖子json对象"tags_name":["Activ ...

  6. Maven打包时抛出should not point at files within the project directory …异常

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8273211 ...

  7. java sleep 抛出异常_PowerMockito模拟Thread.sleep()时抛出中断异常的场景

    点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...

  8. Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法

    当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...

  9. weblogic启动后,抛出大量的java.lang.ArrayIndexOutOfBoundsException异常

    weblogic启动后,抛出大量的java.lang.ArrayIndexOutOfBoundsException异常 参考文章: (1)weblogic启动后,抛出大量的java.lang.Arra ...

最新文章

  1. 注意,免费的 CentOS 落幕,将于本月底终止维护!
  2. Linux 编程中的API函数和系统调用的关系【转】
  3. html的body内标签之图片及表格
  4. CentOS release 6.2 共享文件夹
  5. 【内推】AI独角兽-数美科技-NLP/CV/ASR等开放百余岗位,薪资诱人
  6. 聚类算法:kmeans
  7. 值得收藏的130个神器网站
  8. [Android Pro] 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法...
  9. HR常用的人力资源系统软件有哪些?
  10. 能使用firebug的火狐浏览器下载地址
  11. 小白版教您如何使用SOLIDWORKS MBD
  12. Hadoop2.7.1+Hbase1.2.1集群环境搭建(3)1.x和2.x都支持的集群安装方式
  13. 重积分 | 高斯公式使用的四种情况
  14. BAT布局SDN!Barefoot获阿里巴巴和腾讯2400万美元投资
  15. Spring-04-Spring的入门配置
  16. Google Chrome即将开始警告—停止支持Flash Player
  17. python入门学习随记(十)
  18. linux下inet_addr函数,Linux下两个网络函数inet_addr和inet_network (2008-09-01 01:42)
  19. 数值计算原理及其程序实现
  20. 5.5寸android智能手机,5.5英寸1080P 小辣椒3智能手机正式发布

热门文章

  1. python的Tkinter库简单应用——开发一个简易计算器
  2. Ai计算机类,【分享】计算机类SCI杂志--人工智能(无重复) - 信息科学 - 小木虫 - 学术 科研 互动社区...
  3. 如何当好硬软件助理工程师——实习周报(一)
  4. 23种设计模式——代理模式
  5. 使用Java集合实现麻将(准备牌、洗牌、发牌、看牌)
  6. 关于做淘宝客的一点心得
  7. wingide5-forlinux cracked
  8. 905协议第四部分简单说明
  9. c语言一对多,NRF905一对多的有关问题
  10. 嵌入式Linux C笔试题积累