作者adrianshum (Alien)
看板java
标题Re: [问题] synchronized(lock){lock.wait()}
时间Tue Oct 9 19:39:26 2007
※ 引述《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)
1F:推 allstarschh:感谢 我知道你说的 z->5->5->5 但没code实在 10/09 20:43
2F:→ allstarschh:不了解你的意思 10/09 20:43
3F:推 adrianshum:XDDD 那麽叫版主加一些 sample code 好了 :P 10/09 23:54