2011-12-17 135 views
4

所以我創建一個線程Java中,如何停止線程

Thread personThread = new Thread(Person); 
personThread.start(); 

/** Now to stop it **/ 
personThread.stop(); 

的問題是,當我嘗試編譯,我得到:warning: [deprecation] stop() in Thread has been deprecated。正如我所瞭解的,這已不再使用的方法。那我怎樣才能完全阻止一個線程,與其狀態無關?

+0

你不能沒有嚴重這就是爲什麼停止和合作是deprec ated。 – Voo 2011-12-17 22:47:50

+2

你看過文檔嗎? – 2011-12-17 22:48:06

+0

相關問題和接受的答案:http://stackoverflow.com/questions/7038063/stop-method-in-a-thread – melihcelik 2011-12-17 22:51:30

回答

4

這裏是一個網頁有關:How to Stop a Thread or a Task

... 本文介紹一些背景來停止線程和建議的替代方案,並討論爲什麼中斷()就是答案。它還討論了中斷阻塞I/O以及程序員需要做些什麼來確保他們的線程和任務可以停止。

至於Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?(以前的文章中鏈接)

因爲它本身就是不安全的。停止線程會導致它解鎖所有已鎖定的監視器......這種行爲可能很微妙且難以檢測......用戶沒有警告他的程序可能已損壞。腐敗現象可能會在實際損害發生後隨時出現,甚至可能在未來數小時甚至數天。

4

停止線程的正確方法是調用其上的方法interrupt()並檢查線程在執行時是否被週期性地中斷。

5

你應該中斷一個線程,這是一個溫柔的方式讓它停下來。

無恥的myself副本:

final Thread thread = new Thread(someRunnable); 
thread.start(); 

而不是stop()呼叫interrupt()

thread.interrupt(); 

而在線程手動處理中斷:

while(!Thread.currentThread().isInterrupted()){ 
    try{   
     Thread.sleep(10); 
    } 
    catch(InterruptedException e){ 
     Thread.currentThread().interrupt(); 
    }