本帖最后由 不喝茶的陆羽 于 2013-5-10 15:41 编辑
while(flag)
try{this.wait();}catch(Exception e){}//t1(放弃资格) t2(获取资格)
this.name = name+"--"+count++;
System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
flag = true;
this.notifyAll();
}
// t3 t4
public synchronized void out()
{
while(!flag)
try{wait();}catch(Exception e){}//t3(放弃资格) t4(放弃资格)
System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);
flag = false;
this.notifyAll();
}
老师说这里if不行,会产生一次判断后等待线程唤醒后未经判断就执行了的问题,换成while就会在每次唤醒后都判断。不理解,都已经进入while内的代码唤醒后还会判断吗?求问while工作逻辑。 |
|