作者allstarschh (allstars)
看板java
標題[問題] synchronized(lock){lock.wait()}
時間Tue Oct 9 01:04:22 2007
//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
1F:推 dreamboxer:你寫的是觀念的pseudocode吧.Java不是你寫的那樣Run 10/09 10:08
2F:推 calais007:synchronized不會鎖定所有的synchronized method 10/09 10:45
3F:→ calais007:應該只會lock同一個method 10/09 10:46
4F:推 waskage:A醒來會不會還lock物件 要看他接下去執行的程式在不在 10/09 12:26
5F:→ waskage:synchronized()裡面 10/09 12:28
6F:推 waskage:我想的啦 不知道對不對 亦或是A醒來到lock pool中 10/09 12:32
7F:→ waskage:一定要取得flag才可繼續 這樣就是A hold了 10/09 12:33
8F:推 waskage:而且A要等到B執行完畢釋放flag才可以去搶此物件flagg 10/09 12:51
9F:推 waskage:我查到了 後三行才對 10/09 12:56
10F:推 easy1:我以為.. 這兩個sync block同一時間只會執行一個,因為他們 10/09 16:51
11F:→ easy1:是lock在同一個object上. (是這樣嗎?) 10/09 16:52
12F:推 waskage:樓上對阿 所以A要等B執行完畢放出flag 才會和其他緒搶flag 10/10 01:08