作者adrianshum (Alien)
看板java
标题Re: [问题] synchronized(lock){lock.wait()}
时间Wed Oct 10 17:08:54 2007
※ 引述《dreamboxer (陌生人)》之铭言:
: ※ 引述《adrianshum (Alien)》之铭言:
: 我不确定我所理解的有没有错误...但如果上面的程式以Java执行
: 在 Thread A 里面写 lock.wait(); 是不是有点奇怪?@@
: (应该分别写成wait()和notify()就好吧?)
: 因为 lock.wait() 应该是指让 lock 这个物件/Class进到 Wait Pool 里去,
: 而不是让 A 进到 Wait Pool 里去吧?@@
: 执行上会变成,当A跑到synchronized(lock)的时候,会先去看lock这个物件是否被任何
: Thread锁定,若没有被锁定,那麽就把lock这个物件丢到Wait Pool去,但A本身还是会
: 继续执行下去...
: B跑到synchronized(lock)的时候,会先去看lock这个物件是否被任何Thread锁定,若
: 没有被锁定,那麽就把lock这个物件从Wait Pool叫醒。但若lock这个物件已经被丢到
: Wait Pool,那lock应该是在被锁定的状态,所以B跑到synchronized(lock)的时候,
: 因为没有Thread把lock这个物件的锁解开,所以永远不会去跑lock.notify(),而会一直
: 在那等。
: 有错请鞭...orz
应该是你搞错了.
所谓 wait pool, wait 的就是 Thread 本身.
详细的实作我不太清楚, 但 lock.wait(), 概念
上而言, 就是 current thread 放到 lock 的 wait pool
里等待, 直到有人 invoke lock 的 notify() 来
唤醒 pool 中的 thread.
其实, 你自己写一个 testing app 试试不就知道了吗?
Alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.22.246.26