1

我对 Java SE 6 中 Condition 类的 await 方法有一个奇怪的问题。问题是 await 方法在被另一个线程中断时并不总是抛出异常。

在文档中写道,在以下情况下会抛出 IE:

... 其他一些线程中断当前线程,支持中断线程挂起...

如何解释这个子句:“并且支持线程挂起的中断”

不抛出异常似乎是不可能的。你有过类似的问题吗?

4

2 回答 2

2

InterruptedException如果对象通过signal或API 接收到信号,不抛出什么不是不可能signalAll的,规范说这两种方法将唤醒任何在这种情况下等待的线程。

于 2011-11-30T17:01:12.517 回答
1

我有一个类似的问题,有一个线程在等待一个条件:

Lock someLock = new ReentrantLock();
Condition someCondition = someLock.newCondition();
...
someCondition.await(timeout, TimeUnit.MILLISECONDS);

并发送 theThread.interrupt() 不起作用。事实证明,另一个线程错误地持有 someLock 锁定,因此await()被阻止。在我添加someLock.unlock()到适当的位置之后,await() 开始按预期抛出 InterruptedException。

于 2016-11-05T21:11:10.980 回答