看板 java 關於我們 聯絡資訊
//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 的呢??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.77.224
dreamboxer:你寫的是觀念的pseudocode吧.Java不是你寫的那樣Run 10/09 10:08
calais007:synchronized不會鎖定所有的synchronized method 10/09 10:45
calais007:應該只會lock同一個method 10/09 10:46
waskage:A醒來會不會還lock物件 要看他接下去執行的程式在不在 10/09 12:26
waskage:synchronized()裡面 10/09 12:28
waskage:我想的啦 不知道對不對 亦或是A醒來到lock pool中 10/09 12:32
waskage:一定要取得flag才可繼續 這樣就是A hold了 10/09 12:33
waskage:而且A要等到B執行完畢釋放flag才可以去搶此物件flagg 10/09 12:51
waskage:我查到了 後三行才對 10/09 12:56
easy1:我以為.. 這兩個sync block同一時間只會執行一個,因為他們 10/09 16:51
easy1:是lock在同一個object上. (是這樣嗎?) 10/09 16:52
waskage:樓上對阿 所以A要等B執行完畢放出flag 才會和其他緒搶flag 10/10 01:08