MrZive
2019-01-11 20:18:16
完
关于java synchronized 锁的问题
class TT implements Runnable{ @Override public void run() { Integer apple=new Integer(10); synchronized (apple) {//与while语句互换后就没事 while(true){ if(apple==0){ try { apple.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } apple--; System.out.println(apple); } } } }
线程运行后会报java.lang.IllegalMonitorStateException,一直想不明白为什么会报错,debug后,发现apple.wait后,线程没暂停,继续循环到synchronized再次获取锁才报的错,如果synchronized与while语句互换后就没问题,这又是为什么呢???
评论
所有回答列表(11)
genmon5214 LV5
2019年3月29日
没改前,synchronized (apple)锁在循环外,而你循环中调用了wait()方法,它在同步代码块或者同步函数中被调用是会释放锁对象的,调用sleep方法不会.当第一次循环结束后,此次锁住的对象就被释放了,当你下一次循环时,对象就没有被锁住.
而你改后,将synchronized (apple)锁放在循环内,这样它每次循环时,即便是调用了wait()方法释放对象,也会被再次锁住.
评论(0)
最佳答案
JustLikebongbongbong LV11
2019年1月22日
当执行到apple--后,你的synchrod(apple)锁对象发生变化,导致你的锁消失,而wait()方法不在锁中就会报java.lang.IllegalMonitorStateException
- 等 最代码怎么获取牛币啊?
- 完 谁来告诉我最代码上线的时间,答对者给5牛币,先来先得
- 等 牛友们,大家好,你们做程序员多久了?现在还好吗?
- 完 在微信打开的页面里进行app下载
- 等 最代码2014年欢乐聚声会
- 完 mysql如何查询表数据并且对3个字段降序的SQL?
- 完 最代码牛币机制改革
- 完 成功的在bae上使用了自定义运行环境 jetty+nginx的组合,大家对jetty+nginx优化有哪些心得?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 为什么java BufferedImage类处理大图直接抛出内存溢出的异常?
- 等 最代码是否开发手机app客户端?
- 完 java程序员学习哪些java的技术?java有哪些框架?都能做哪方面的开发?
- 等 php格式网页文件怎么运行?
- 等 Java volatile值获取的问题
- 等 前端vue,拦截了登录后台后,返回的token,requests拦截token,但是发送请求的时候,就出现跨越异常
- 等 大专本科计算机科班怎么找到Java工作?
- 等 eclipse怎么把三个java swing游戏项目合成一个项目?
- 完 伙伴们,大家都有什么好的解压方式么,分享一下~
- 完 三四线城市,6、7k,运维工作,索然无味,想去辞职上培训,各位牛牛有什么建议嘛
- 等 jsp页面输入中文变成问号
- 等 JPA在线上运行一段时间后报错Caused by: java.lang.IncompatibleClassChangeError: null
- 等 PHP 这个规则用preg_match_all怎么写
- 等 大佬们,有没有知道Alfresco如何配置LDAP登录呢?
- 等 php的install目录是框架带的吗?
相关问答
最近浏览
dfsdfsd23423 LV1
2021年2月20日
ddhdoashfo LV1
2019年12月3日
Tandaly LV18
2019年9月27日
wyx123456 LV19
2019年8月27日
咸鱼想扣6
2019年7月1日
暂无贡献等级
梓嘉一心一意ZYPeng丶 LV5
2019年4月10日
genmon5214 LV5
2019年3月29日
我要大芒果 LV2
2019年3月27日
wjl19890214 LV1
2019年3月26日
super敏敏 LV7
2019年3月20日