我对Java SE 6中的Condition类的await方法有一个奇怪的问题。 问题是await方法并不总是在被另一个线程中断时抛出异常。
在文档中写道,在以下情况下抛出IE:
... 其他一些线程会中断当前线程,并支持线程挂起的中断 ...
如何解释这个subsentense:“并支持线程暂停的中断”
如果不抛出异常,它就变得不可能了。 你有过类似的问题吗?
答案 0 :(得分:2)
如果对象通过InterruptedException
或signal
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。