Re: [問題] synchronized(lock){lock.wait()}

看板java作者 (Alien)時間18年前 (2007/10/10 17:08), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《dreamboxer (陌生人)》之銘言: : ※ 引述《adrianshum (Alien)》之銘言: : 我不確定我所理解的有沒有錯誤...但如果上面的程式以Java執行 : 在 Thread A 裡面寫 lock.wait(); 是不是有點奇怪?@@ : (應該分別寫成wait()和notify()就好吧?) : 因為 lock.wait() 應該是指讓 lock 這個物件/Class進到 Wait Pool 裡去, : 而不是讓 A 進到 Wait Pool 裡去吧?@@ : 執行上會變成,當A跑到synchronized(lock)的時候,會先去看lock這個物件是否被任何 : Thread鎖定,若沒有被鎖定,那麼就把lock這個物件丟到Wait Pool去,但A本身還是會 : 繼續執行下去... : B跑到synchronized(lock)的時候,會先去看lock這個物件是否被任何Thread鎖定,若 : 沒有被鎖定,那麼就把lock這個物件從Wait Pool叫醒。但若lock這個物件已經被丟到 : Wait Pool,那lock應該是在被鎖定的狀態,所以B跑到synchronized(lock)的時候, : 因為沒有Thread把lock這個物件的鎖解開,所以永遠不會去跑lock.notify(),而會一直 : 在那等。 : 有錯請鞭...orz 應該是你搞錯了. 所謂 wait pool, wait 的就是 Thread 本身. 詳細的實作我不太清楚, 但 lock.wait(), 概念 上而言, 就是 current thread 放到 lock 的 wait pool 裡等待, 直到有人 invoke lock 的 notify() 來 喚醒 pool 中的 thread. 其實, 你自己寫一個 testing app 試試不就知道了嗎? Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.22.246.26
文章代碼(AID): #1739QdcE (java)
討論串 (同標題文章)
文章代碼(AID): #1739QdcE (java)