【发布时间】:2011-05-19 06:14:16
【问题描述】:
我在 thread A 上有一个对象正在调用 wait(),而 thread B 上的另一个对象做了一些工作然后调用 thread A的对象的notify()。然后线程 A 执行一些后处理。
我的问题很简单:
synchronized(this)
{
while(!flag)
{
try
{
wait();
getLogger().info("No longer waiting");
}
catch (InterruptedException ie)
{
getLogger().info("Wait threw InterruptedException");
}
}
}
导致“不再等待”而不是“等待引发 InterruptedException”的信息消息。
我很困惑,因为这个 (http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#wait()):
抛出:
InterruptedException - 如果另一个线程中断了 当前线程在当前线程等待之前或期间 通知。当前线程的中断状态被清除 什么时候抛出这个异常。
为什么我会有奇怪的行为?
谢谢。
【问题讨论】:
-
另一个线程在您的对象上调用
notify不符合中断条件。
标签: java concurrency synchronization wait notify