作者adrianshum (Alien)
看板java
標題Re: [問題] 猛虎一書第 18 題
時間Thu Jun 19 14:21:39 2008
※ 引述《HAWA11 (ㄟ)》之銘言:
[43]
: 正確答案是 會run出 0 2 4 6
: 我想問的是,為什麼在getResult的時候 如果result還沒好,進入wait()
: 怎麼確定是他要的那個答案會來notify()
: 例如我現在computations[1]要getResult, 然後wait()
: 那如果computations[2]比computations[1]還快做完然後call notify()
: 這樣不就亂了?
: 可是我實際上跑這個程式時 不會出現這個狀況
: 雖然四個thread不一定是依序跑完
: 可是就是怎樣都不會出現我說的那個情況
: 由不同的thread來notify result
: 不好意思,不知道這樣大家看的懂嗎
你要知道的是, declare 為 synchornized 的 member method,
意思是 synchronize(
this)
wait() 與 notify() 做的是
this.wait() 和
this.notify
所以 computation[2] 做的 notify() 是 notify 那些正在 wait
computation[2] 的 thread, 而不是所有 thread
alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推 HAWA11:是喔....我還以為是notify waiting pool裡面任一thread 06/19 14:23
→ HAWA11:謝謝你的回答~ 06/19 14:25