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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柴永菲 黑马帝   /  2011-11-7 20:01  /  2142 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public synchronized void set(String name){
  while(flag)
   try{this.wait();}catch(Exception e){}
   this.name=name+"....."+count++;
   System.out.println(Thread.currentThread().getName()+"...生产者"+this.name);
    flag=true;
    this.nitifyAll();
}
当一个线程在这个方法中等待时被唤醒后为什么不是直接执行 this.name=name+"....."+count++;
而是执行while(flag)呢?

6 个回复

正序浏览
李龙龙 黑马帝 2011-11-9 01:54:51
7#
上面的代码,
while(flag)
   try{this.wait();}catch(Exception e){}
不是一个循环语句吗,执行wait(),后进行条件判断,执行while(flag),然后才继续执行。flag是一个标记。
回复 使用道具 举报
就是写if也会顺序执行的,这是由执行顺序决定的吧
回复 使用道具 举报
这就是if 和 while 在用法上最大的区别,
回复 使用道具 举报
wait()方法会让我们的线程释放锁旗标,进入wait池中,等待其他线程的notify()。其他的线程notify()以后,这个线程就进入了同步监视器的等待池中,等待其他的线程释放锁旗标,那他得回去等着啊

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁锡伟 发表于 2011-11-7 20:10
。。。。你这样写代码我看不懂。。。while后面就是只有一行代码,好歹也加上大括号吧 ...

不用加大括号也行的
回复 使用道具 举报
。。。。你这样写代码我看不懂。。。while后面就是只有一行代码,好歹也加上大括号吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马