A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 回天之力 中级黑马   /  2013-10-24 00:26  /  1061 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 回天之力 于 2013-10-25 18:25 编辑

图中是讲  多生产者多消费者问题  时代一个截屏。
不是 set()方法都上着锁吗,怎么t2还可以进去执行代码呢?虽然整体看懂了,但这点有点疑问。
还是我同步知识没有理解透呀,大家给指点一下哈!!!谢谢

暴风截图201310248126435.jpg (63.96 KB, 下载次数: 8)

暴风截图201310248126435.jpg

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 这样才对.1个技术分勉励

查看全部评分

3 个回复

倒序浏览
本帖最后由 匡文 于 2013-10-24 00:40 编辑

线程wait()的时候,不仅会释放CPU执行权,还会释放锁,所以后面的线程又可以进去了。记住这一点就好理解啦{:soso_e100:}
回复 使用道具 举报
就按视频里的说吧,当t1抢到执行权后,执行完一次,他还握着执行权,返回继续执行,这时候flag = true。执行try语句this.wait()。关键这里,执行完后,t1就已经放弃执行资格,也就是放弃了锁,这时候t2当然可以进来了。这里需要注意的是如果notify();有可能产生死锁。用notifyAll有可能会导致多次打印,所以要用while循环判断。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马