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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈雪平 中级黑马   /  2012-12-28 15:57  /  1801 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈雪平 于 2012-12-28 21:08 编辑

毕老师12天视频,生产者和消费者例子中:
public synchronized void set(String name)
        {
                while(flag)////此处用if和while的区别
                        try{this.wait();}catch(Exception e){}//t1(放弃资格)  t2(获取资格)
                this.name = name+"--"+count++;

                System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
                flag = true;
                this.notifyAll();
        }

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
你想啊!用if只能判断一次,用while是循环判断的,

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
是啊 不管 flag 在哪被 赋过值

一次性判断 和 循环判断,怎么能一样啊。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果是if就判断一次,t1或t2被唤醒后,不再进行判断,而直接执行下面的语句,这样就造成了生产两次的情况。如果改上while ,t1,t2在被唤醒后,都会再次进入循环,对flag进行判断,如果为false,跳出循环,执行下面语句。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
if只是进行一次判断,while是循环,也就是只要满足括号内的条件,会一直循环执行,希望楼主把java基础在巩固下,这错误太低级了啊!
回复 使用道具 举报
恩恩,懂了,当时听的糊糊涂涂的,有点迷糊了,谢谢了
回复 使用道具 举报
jagon 中级黑马 2014-3-12 12:10:35
7#
if是条件判断,while是循环判断,而且if在判断时如果出现线程的暂时切换,可能会出错,但是while每次判断都会去判断初始条件,所以不会出错(最后一点还是要好好理解的)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马