非常着急,大家帮忙看看这道题到底哪样是正确的???
为了使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才是对的。这样才能达到生产与消费的循环。