为了使the Flags2 class will compile and make appropriate use of the wait/notify mechanism.public class Flags2 {
  private boolean isReady = false;
  public synchronized void produce() {
    isReady = true;
    notifyAll();
  }
  public synchronized void consume() {
    while(!isReady) {
     try {
        wait();
       }catch(Exception ex) {}
    }
    isReay = true;
  }
}public class Flags2 {
  private boolean isReady = false;
  public synchronized void produce() {
    isReady = true;
    notifyAll();
  }
  public synchronized void consume() {
    while(!isReady) {
     try {
        wait();
       }catch(Exception ex) {}
    }
    isReay = false;
  }
}两段代码,最后一句 isReady = true; 或者 isReady = false;都可以编译,那么到底应该是isReady = ture还是isReady = false呢??为什么?

解决方案 »

  1.   

    这个生产者消费者问题,关键是理解之间的关系以及catch的作用,程序代码的意思就是
    生产的时候,声明已经准备好了,唤醒所有的消费进程。消费的时候,如果没有准备好,那么消费程序就一直等待。如果消费者在等待的时候出现异常,可能的情况就是消费者已经没东西消费了,这个时候应该让生产者执行,当isReady=true的时候,消费者跳过,当isReady=false的时候,消费者还会执行,但是程序已经异常警告没有东西可消费了。所以我想按题目的意思,isReady=true才是对的。这样才能达到生产与消费的循环。