一個關於thread的問題

看板java作者 (喔帥)時間19年前 (2006/07/13 23:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
有一程式碼如下 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
文章代碼(AID): #14jcC5ne (java)
文章代碼(AID): #14jcC5ne (java)