日期:2014-05-20  浏览次数:20692 次

非常着急,大家帮忙看看这道题到底哪样是正确的???
为了使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呢??为什么?

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