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

看板java作者 (Alien)時間18年前 (2007/10/09 19:39), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/5 (看更多)
※ 引述《allstarschh (allstars)》之銘言: : //Thread A : synchronized(lock){ : lock.wait(); : } : //Thread B : synchronized(lock){ : lock.notify(); : } : 想請問 Thread A先跑 所以先call lock.wait() : 後來Thread B跑 : 我想請問 B能夠進到synchronized裡嗎? : 寫了程式測一下 似乎是可以的 : 也看過一些synchronized 是這樣寫的 : 請問這樣寫的話是正確的嗎 : 會不會有哪些side effect : 另外 如果這樣是ok 的 : 那也就是說Thread A在wait時release了lock : 但在Thread B notify時 會把A wake up : 但此時B已經進到synchronized裡面 : 那這時lock是A 還B hold 的呢??? 我之前有貼過一篇文章講 wait & notify 的 大概而言會是這樣: A 取得 lock 的 mutex (當成是 mutex 想吧) B 企圖想acquire lock, 但被 A acquire 了所以 B 會等 然後 A 到 wait 的時候會把 lock release 和等待 notify 因為 A release lock 所以 B 會拿到 lock B invoke notify A 會醒來, 並企圖取 lock, 但由於被 B 拿著所以 A 會等 B 離開 synchronized block, 所以把 lock release A 會取得 lock 的 mutex 然後繼續之後的工作, 直到離開 synchronized block Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.22.246.26 ※ 編輯: adrianshum 來自: 202.22.246.26 (10/09 19:40)

10/09 20:43, , 1F
感謝 我知道你說的 z->5->5->5 但沒code實在
10/09 20:43, 1F

10/09 20:43, , 2F
不了解你的意思
10/09 20:43, 2F

10/09 23:54, , 3F
XDDD 那麼叫版主加一些 sample code 好了 :P
10/09 23:54, 3F
文章代碼(AID): #172sXlXX (java)
討論串 (同標題文章)
文章代碼(AID): #172sXlXX (java)