1

我有一個奇怪的問題,在Java SE 6中的Condition類的await方法。 問題是await方法不總是拋出異常,而被另一個線程中斷。等待類的方法條件不拋出InterruptedException

在文檔上記着,當IE被拋出:

... 其他某些線程中斷當前線程,並且中斷線程掛起支持 ...

如何解釋這個次級:「支持線程暫停的中斷」

它接縫是不可以拋出異常的。 你有過類似的問題嗎?

回答

2

它不是不可能不拋出InterruptedException什麼對象是否通過signalsignalAll API接收到的信號,該規範說這兩種方法將喚醒這些等待此條件的任何線程。

+1

很明顯,我只是在談論**關於中斷非信號。 – maseth

0

我有一個類似的問題,有一個線程等待條件:

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

和發送theThread.interrupt()沒有工作。事實證明,錯誤地另一個線程正在鎖定someLock,所以await()被封鎖。在我加入someLock.unlock()之後,await()開始按預期拋出InterruptedException。