以下是部分代码,有两个线程,线程一调用changeColor(),线程二调用waitForChange()。线程二执行到wait()等待,线程一赋值changed=true;调用notify();线程二接着执行,然后线程...
以下是部分代码,有两个线程,线程一调用changeColor(),线程二调用waitForChange()。线程二执行到wait()等待,线程一赋值changed = true;调用notify(); 线程二接着执行,然后线程二在while循环里面又把changed赋值为false,这样它是怎么跳出while循环的?
synchronized void changeColor() {
switch(tlc) {
case RED:
tlc = TrafficLightColor.GREEN;
break;
case YELLOW:
tlc = TrafficLightColor.RED;
break;
case GREEN:
tlc = TrafficLightColor.YELLOW;
}
changed = true;
notify(); // signal that the light has changed
}
// Wait until a light change occurs.
synchronized void waitForChange() {
try {
while(!changed)
wait(); // wait for light to change
changed = false;
} catch(InterruptedException exc) {
System.out.println(exc);
}
}
// Return current color.
人工置顶
展开