作者HAWA11 (ㄟ)
看板java
标题[问题] 猛虎一书第 18 题
时间Thu Jun 19 14:11:26 2008
class Computation extends Thread{
private int num;
private boolean isComplete;
private int result;
public Computation(int num)
{this.num = num;}
public synchronized void run(){
result = num * 2;
isComplete = true;
System.out.println(result +" notify()");
notify();
}
public synchronized int getResult(){
while(!isComplete)
{
try{
System.out.println("wait()");
wait();
}catch(InterruptedException e){}
}
return result;
}
public static void main(String[] args){
Computation[] computations = new Computation[4];
for(int i = 0;i< computations.length;i++)
{
computations[i] = new Computation(i);
computations[i].start();
}
for(Computation c: computations)
System.out.println(c.getResult()+ " ");
}
}
正确答案是 会run出 0 2 4 6
我想问的是,为什麽在getResult的时候 如果result还没好,进入wait()
怎麽确定是他要的那个答案会来notify()
例如我现在computations[1]要getResult, 然後wait()
那如果computations[2]比computations[1]还快做完然後call notify()
这样不就乱了?
可是我实际上跑这个程式时 不会出现这个状况
虽然四个thread不一定是依序跑完
可是就是怎样都不会出现我说的那个情况
由不同的thread来notify result
不好意思,不知道这样大家看的懂吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.84.24