我有一個後臺線程在我的應用程序中運行,我需要安全地殺死它。除了使用布爾型標誌,我怎樣才能殺死java中的一個線程?我讀過,我不能再使用thread.stop(),因爲它不安全。但是有沒有適當的方法來做到這一點?有人可以給我一個代碼片段嗎?如何殺死android中的線程?
感謝
我有一個後臺線程在我的應用程序中運行,我需要安全地殺死它。除了使用布爾型標誌,我怎樣才能殺死java中的一個線程?我讀過,我不能再使用thread.stop(),因爲它不安全。但是有沒有適當的方法來做到這一點?有人可以給我一個代碼片段嗎?如何殺死android中的線程?
感謝
其在任何語言絕對不安全的殺thread-你不知道這是什麼的線程可以做,什麼狀態時,它可能會留下。通過線程偶爾檢查isCanceled使用cancel方法可以讓線程管理自己的安全 - 只有在自己可以安全地自行殺死或進行所需的清理時,纔可以選擇這種方式。
如果您實際上並不需要殺死一個線程,但只是想等到它結束,請使用連接。
如果您絕對需要殺死一個線程,請繼續並使用stop。只是不要指望你的狀態在事後保持安全或一致 - 這應該只在終止應用程序/活動時完成。
是的,你是正確的停止()已被棄用,它是不安全的使用。我已經使用布爾值來停止我在代碼中使用的所有線程。 –
嘗試使用類似
service.getThread().interrupt();
service.setThread(null);
或者
thread.interrupt();
thread = null;
需要使用標誌。例如:
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.
}
爲什麼一個標誌不起作用?線程是否等待發生什麼? –
爲什麼你不喜歡布爾標誌解決方案? – hoaz
我可以使用布爾標誌來工作。但我試圖找出是否有另一種方式做到這一點?作爲C#中的一個例子,我認爲你可以中止一個線程。 –