作者dreamboxer (陌生人)
看板java
标题Re: [问题] synchronized(lock){lock.wait()}
时间Wed Oct 10 17:02:26 2007
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《allstarschh (allstars)》之铭言:
: : //Thread A
: : synchronized(lock){
: : lock.wait();
: : }
: : //Thread B
: : synchronized(lock){
: : lock.notify();
: : }
我不确定我所理解的有没有错误...但如果上面的程式以Java执行
在 Thread A 里面写 synchronized(lock) 又写 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这个物件已经A被丢到
Wait Pool,那lock应该是在被锁定的状态,所以B跑到synchronized(lock)的时候,
因为没有Thread把lock这个物件的锁解开,所以永远不会去跑lock.notify(),而会一直
在那等。
有错请鞭...orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.20.177.117
※ 编辑: dreamboxer 来自: 211.20.177.117 (10/10 17:08)