如果我在一个没有等待的线程上调用notify,会发生什么?

Ale*_*lex 3 .net c# java multithreading

我希望有一个位于事件队列之上的线程,并相应地对它作出反应.我的想法是让它清除所有元素,一旦它到达队列的末尾,wait()直到遇到notify()它为止.然而,问题是,notify()当线程没有等待时会发生什么?

PS:我在javadoc中一直在阅读的这个监视器业务是什么?

Ste*_*n C 6

简短的回答是没有任何反应.

稍长的答案是,如果监视器上没有任何等待,则没有任何内容可以传递通知,并且通知将被静默丢弃.

您一直听到的监视器只是您正在使用的原始锁定机制的技术术语.(IIRC这个术语是由监控概念的发明者 - 托尼霍尔创造的 - 他在并发方面做了大量的开创性工作.)

这个想法是某些代码区域(在Java中,它们是同步的方法体和同步块),线程只有在拥有独占锁时才能执行.想要进入这些区域的其他线程必须等待锁定变为可用.这些waitnotify方法提供了与监视器结合使用的附加信令机制.