黑马程序员技术交流社区

标题: 问题 [打印本页]

作者: 柴永菲    时间: 2011-11-7 20:01
标题: 问题
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)呢?
作者: 梁锡伟    时间: 2011-11-7 20:10
。。。。你这样写代码我看不懂。。。while后面就是只有一行代码,好歹也加上大括号吧
作者: 柴永菲    时间: 2011-11-7 20:15
梁锡伟 发表于 2011-11-7 20:10
。。。。你这样写代码我看不懂。。。while后面就是只有一行代码,好歹也加上大括号吧 ...

不用加大括号也行的
作者: 张邦庆    时间: 2011-11-7 20:17
wait()方法会让我们的线程释放锁旗标,进入wait池中,等待其他线程的notify()。其他的线程notify()以后,这个线程就进入了同步监视器的等待池中,等待其他的线程释放锁旗标,那他得回去等着啊
作者: 郭敏    时间: 2011-11-7 20:45
这就是if 和 while 在用法上最大的区别,
作者: 坚强    时间: 2011-11-8 21:51
就是写if也会顺序执行的,这是由执行顺序决定的吧
作者: 李龙龙    时间: 2011-11-9 01:54
上面的代码,
while(flag)
   try{this.wait();}catch(Exception e){}
不是一个循环语句吗,执行wait(),后进行条件判断,执行while(flag),然后才继续执行。flag是一个标记。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2