2013-02-13 40 views
1

如何中斷/恢復資源等待線程回到其他作品?說,我的線程正在等待資源在響應狀態下掛起或不掛起的資源的響應。我怎樣才能恢復該線程去做其他工作?如何恢復正在等待資源的線程?

其他線程是否可以向等待的線程發送異常,以便有例外,它可以回到它的其他工作?

更新:

我試了下來,但沒有用。

我有超時的線程,它將檢查是否發生了默認的超時發生在第一個線程等待的特定事務中,如果是,則在第一個線程上觸發interrupt()調用。

+0

中斷工作,無論等待什麼都必須*可中斷*。通常我會重新設計這個任務隊列(例如'ExecutorService'),並且這個人可以以某種方式檢查某個特定任務是否準備好執行(例如,所有預期的io已經完成)。這確實意味着轉換你的系統變成一個異步系統 - 這是一項不平凡的任務。 – Nim 2013-02-13 12:26:53

+0

如果您正在等待資源,則應該使用http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#wait(long) – 2013-02-13 12:34:16

+1

什麼樣的操作線程塊在? – 2013-02-13 13:18:21

回答

0

是的,你可以interrupt的線程。使用Thread.interrupt機制,谷歌它。

+0

我以前試過,但沒用。我會更新這個問題。 – Kubuntu 2013-02-13 12:20:20

3

答案取決於很多因素。 中斷線程的「正確」方式是使用thread.interrupt()方法。這要求線程的代碼是合作的;應該通過處理由可中斷操作(例如等待或睡眠)拋出的InterruptedException或定期檢查當前線程的中斷標誌來了解中斷。

然後,代碼應該決定中斷應該有什麼後果。通常情況下,您希望一個線程在發生中斷時正常終止。

而不是使用中斷,我會檢查您的阻止操作是否有內置的超時機制。例如,如果在obj.wait()上阻塞,則可以使用obj.wait(timeout)。