作者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