一個關於thread的問題
有一程式碼如下
public class A extends Thread{
B b;
public A (B bb){
b = bb;
}
public void run(){
synchronized(b){
try{
wait();
} catch (InterruptionException e) {}
}
System.out.println("Completed");
}
public static void main (String[] args){
B bb = new B();
new A(bb).start();
new A(bb).start();
new A(bb).start();
bb.start();
}
}
class B extends Thread{
public void run(){
synchronized(this){
notifyAll();
}
}
}
在上面的程式裡,把notify()換成notifyAll(),甚至兩者都不要的結果都是一樣的。
我的問題是,當notifyAll()被呼叫時,正在wait的三個thread會被awake,
但只有一個thread可以執行synchronized區塊內的程式,這時候另外的兩個thread
是處於什麼樣的狀態呢?是wait嗎?還是runnable?
另外,如果把程式碼中的notifyAll()換成notify(),
當這一個thread從同步區塊內離開之後,並沒有再呼叫notify(),
那麼在wait狀態之下的thread也會自己回到runnable狀態嗎?
對於thread的這個部分感到困擾,還請版上的大大們協助解答了,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.7.139
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):