2013-05-20 179 views
4

我有一個後臺線程在我的應用程序中運行,我需要安全地殺死它。除了使用布爾型標誌,我怎樣才能殺死java中的一個線程?我讀過,我不能再使用thread.stop(),因爲它不安全。但是有沒有適當的方法來做到這一點?有人可以給我一個代碼片段嗎?如何殺死android中的線程?

感謝

+1

爲什麼一個標誌不起作用?線程是否等待發生什麼? –

+0

爲什麼你不喜歡布爾標誌解決方案? – hoaz

+0

我可以使用布爾標誌來工作。但我試圖找出是否有另一種方式做到這一點?作爲C#中的一個例子,我認爲你可以中止一個線程。 –

回答

8

其在任何語言絕對不安全的殺thread-你不知道這是什麼的線程可以做,什麼狀態時,它可能會留下。通過線程偶爾檢查isCanceled使用cancel方法可以讓線程管理自己的安全 - 只有在自己可以安全地自行殺死或進行所需的清理時,纔可以選擇這種方式。

如果您實際上並不需要殺死一個線程,但只是想等到它結束,請使用連接。

如果您絕對需要殺死一個線程,請繼續並使用stop。只是不要指望你的狀態在事後保持安全或一致 - 這應該只在終止應用程序/活動時完成。

+0

是的,你是正確的停止()已被棄用,它是不安全的使用。我已經使用布爾值來停止我在代碼中使用的所有線程。 –

5

嘗試使用類似

service.getThread().interrupt(); 
service.setThread(null); 

或者

thread.interrupt(); 
thread = null; 
0

需要使用標誌。例如:

private boolean isThOn; //flag isThOn 
long delaytime; 
int times; 
... 
new Thread() { 
     public void run() { 
      int i=0; 
      isThOn = true; 
      while (isThOn && i<times) { 
       try { 
        i++; 
        //{...} 
        if (i == times) isThOn = false; 
        sleep(delaytime); 
       } catch (Exception e) {e.printStackTrace();} 
      } 
     } 
}.start(); 
public void cancelthd() { 
    isThOn = false; //whileloop will stop if isThOn = false -> Thread will Terminated befor i = times. 
}