我对 Java SE 6 中 Condition 类的 await 方法有一个奇怪的问题。问题是 await 方法在被另一个线程中断时并不总是抛出异常。
在文档中写道,在以下情况下会抛出 IE:
... 其他一些线程中断当前线程,支持中断线程挂起...
如何解释这个子句:“并且支持线程挂起的中断”
不抛出异常似乎是不可能的。你有过类似的问题吗?
我对 Java SE 6 中 Condition 类的 await 方法有一个奇怪的问题。问题是 await 方法在被另一个线程中断时并不总是抛出异常。
在文档中写道,在以下情况下会抛出 IE:
... 其他一些线程中断当前线程,支持中断线程挂起...
如何解释这个子句:“并且支持线程挂起的中断”
不抛出异常似乎是不可能的。你有过类似的问题吗?
InterruptedException
如果对象通过signal
或API 接收到信号,不抛出什么不是不可能signalAll
的,规范说这两种方法将唤醒任何在这种情况下等待的线程。
我有一个类似的问题,有一个线程在等待一个条件:
Lock someLock = new ReentrantLock();
Condition someCondition = someLock.newCondition();
...
someCondition.await(timeout, TimeUnit.MILLISECONDS);
并发送 theThread.interrupt() 不起作用。事实证明,另一个线程错误地持有 someLock 锁定,因此await()
被阻止。在我添加someLock.unlock()
到适当的位置之后,await() 开始按预期抛出 InterruptedException。