class Lock implements Runnable{
int i=0;
public synchronized void run(){
for(i=0;i<10;i++){
if(Thread.currentThread().getName().equals("t1") && i == 5)
{try { this.wait();} catch(InterruptedException ie){}}
System.out.print(Thread.currentThread().getName()+" ");
if(Thread.currentThread().getName().equals("t3") && i == 9)
this.notifyAll();
}
}
}
public class ThreadLock {
public static void main(String[] args){
Lock l = new Lock();
Thread t1 = new Thread(l);
Thread t2 = new Thread(l);
Thread t3 = new Thread(l);
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
t1.start();
t2.start();
t3.start();
}
}
輸出是: T1 T1 T1 T1 T1 T3 T3 T3 T3 T3 T3 T3 T3 T3 T3 T1 T2 T2 T2 T2 T2 T2 T2 T2 T2 T2線程沒有在Java notifyAll的後印刷一切
T1是調用notifyAll方法後不全部打印10次。 我跑了很多次,但每次t1只打印6次。 爲什麼t1沒有全部打印10次? 請儘快回覆
即使您將'i'更改爲本地變量,該程序也不是_guaranteed_,因此總是會打印「t1」十次。理論上t3線程可以完成任務,並在t1任務調用wait()之前調用notifyAll()。如果發生這種情況,'wait()'調用將永遠不會返回。 – 2014-10-08 21:49:55