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

看板java作者 (allstars)時間16年前 (2007/10/09 01:04), 編輯推噓8(804)
留言12則, 4人參與, 最新討論串1/5 (看更多)
//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

10/09 10:08, , 1F
你寫的是觀念的pseudocode吧.Java不是你寫的那樣Run
10/09 10:08, 1F

10/09 10:45, , 2F
synchronized不會鎖定所有的synchronized method
10/09 10:45, 2F

10/09 10:46, , 3F
應該只會lock同一個method
10/09 10:46, 3F

10/09 12:26, , 4F
A醒來會不會還lock物件 要看他接下去執行的程式在不在
10/09 12:26, 4F

10/09 12:28, , 5F
synchronized()裡面
10/09 12:28, 5F

10/09 12:32, , 6F
我想的啦 不知道對不對 亦或是A醒來到lock pool中
10/09 12:32, 6F

10/09 12:33, , 7F
一定要取得flag才可繼續 這樣就是A hold了
10/09 12:33, 7F

10/09 12:51, , 8F
而且A要等到B執行完畢釋放flag才可以去搶此物件flagg
10/09 12:51, 8F

10/09 12:56, , 9F
我查到了 後三行才對
10/09 12:56, 9F

10/09 16:51, , 10F
我以為.. 這兩個sync block同一時間只會執行一個,因為他們
10/09 16:51, 10F

10/09 16:52, , 11F
是lock在同一個object上. (是這樣嗎?)
10/09 16:52, 11F

10/10 01:08, , 12F
樓上對阿 所以A要等B執行完畢放出flag 才會和其他緒搶flag
10/10 01:08, 12F
文章代碼(AID): #172cCNaE (java)
討論串 (同標題文章)
文章代碼(AID): #172cCNaE (java)