2012-03-11 47 views
3

我一直在一個同步塊內獲取這個異常,在這個異步塊中我調用等待同一個對象同步。首先打斷一個線程是什麼意思?其次,什麼是這種情況發生的正常場景?關於可能發生什麼或我應該做什麼的任何建議?Java InterruptedException - 我很困惑,它甚至意味着線程被中斷或爲什麼它會是什麼

+0

你可以發表一些代碼,所以我們可以看到問題的背景? – ose 2012-03-11 03:06:56

回答

3

中斷機制用於通知線程它應該儘快終止自己。這允許中斷的線程安全地退出,而不會使任何數據處於不一致的狀態。

+0

有關更多信息,建議閱讀Java Concurrency in Practice,特別是「取消和關閉」一章。 – Moonbeam 2012-03-11 03:17:43

+1

我想指出,中斷並不一定意味着結束處理。它只是設置一個標誌並拋出InterruptedException。中斷的線程如何反應純粹是它的問題。它可以用來轉換處理狀態或作爲重啓動器。它只是告訴線程一些根本性的變化,而且當前的執行狀態可能不再有效或不可取,或者無論如何。 – 2012-03-11 03:35:37

+0

@JakubZaverka,你提出了一些非常好的觀點。 – Moonbeam 2012-03-11 12:54:11

3

首先打斷一個線程是什麼意思?

這意味着線程對象上有東西叫做Thread.interrupt()。這會在線程上設置interrupted標誌,並導致某些方法調用以異常終止。

其次,什麼是這種情況發生的正常場景?

它通常用於第二個線程要告訴該線程停止它正在做的事情。該調用可以是直接的,也可以通過庫方法完成。例如,ThreadPoolExecutor.shutdownNow()使用中斷來(嘗試)終止正在執行的任務。

請注意,中斷線程並不能保證停止它。事實上,除了拋出異常的情況外,如果線程調用interupted()isInterupted(),線程只會注意到它已被中斷。即使這樣,它也可以簡單地清除旗幟並繼續,好像什麼也沒有發生。

任何有關可能會發生什麼或我應該做什麼的建議?

看看什麼是「控制」被中斷的線程。

相關問題