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