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

看板java作者 (陌生人)時間18年前 (2007/10/10 17:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : ※ 引述《allstarschh (allstars)》之銘言: : : //Thread A : : synchronized(lock){ : : lock.wait(); : : } : : //Thread B : : synchronized(lock){ : : lock.notify(); : : } 我不確定我所理解的有沒有錯誤...但如果上面的程式以Java執行 在 Thread A 裡面寫 synchronized(lock) 又寫 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這個物件已經A被丟到 Wait Pool,那lock應該是在被鎖定的狀態,所以B跑到synchronized(lock)的時候, 因為沒有Thread把lock這個物件的鎖解開,所以永遠不會去跑lock.notify(),而會一直 在那等。 有錯請鞭...orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.20.177.117 ※ 編輯: dreamboxer 來自: 211.20.177.117 (10/10 17:08)
文章代碼(AID): #1739KZVe (java)
討論串 (同標題文章)
文章代碼(AID): #1739KZVe (java)