await类的方法不抛出InterruptedException

时间:2011-11-30 16:51:28

标签: java multithreading java.util.concurrent concurrency interrupted-exception

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

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

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

如何解释这个subsentense:“并支持线程暂停的中断”

如果不抛出异常,它就变得不可能了。 你有过类似的问题吗?

2 个答案:

答案 0 :(得分:2)

如果对象通过InterruptedExceptionsignal API接收到信号,则不能不抛出signalAll,规范说这两种方法会唤醒任何等待的线程这种情况。

答案 1 :(得分:1)

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

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

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