2010-06-28 34 views

回答

12

你可以問線程中斷,調用Thread.interrupt()

注意一些其他的方法有類似的語義存在 - stop()destroy() - 但他們棄用 ,因爲他們是unsafe。不要試圖使用它們。

+1

。 destroy()不被depricated。 – JavaUser 2010-06-28 07:36:33

+1

請參閱Bozho的「不安全」鏈接,特別是「我應該使用什麼而不是Thread.stop()」部分來查看執行* kill *線程的規範方法。中斷只會導致任何當前正在執行的阻塞調用停止運行,但本身不會阻止該線程執行。 – 2010-06-28 07:37:53

+2

@JavaUser它是,從Java 1.5 – Bozho 2010-06-28 07:40:07

6

正如Bozho所說,Thread.interrupt()是通用和正確的方法。但請記住它需要線程配合;實現忽略中斷請求的線程非常容易。

爲了使一段代碼能夠以這種方式中斷,它不應該忽略任何InterruptedException,並且應該檢查每個循環迭代中的中斷標誌(使用Thread.currentThread()。isInterrupted())。另外,它不應該有任何不可中斷的阻塞操作。如果存在這樣的操作(例如等待一個套接字),那麼你需要一個更具體的中斷實現(例如關閉套接字)。