Re: [問題] synchronized(lock){lock.wait()}
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 5 篇):