黑马程序员技术交流社区
标题:
问题
[打印本页]
作者:
柴永菲
时间:
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