我的应用程序中运行了后台线程,我需要安全地终止它。除了使用布尔标志之外,我怎样才能杀死java中的线程?我已经读过我不能再使用thread.stop(),因为它不安全。但是有没有正确的方法呢?有人可以给我一个代码片段吗?
由于
答案 0 :(得分:8)
它在任何语言中永远不会安全地杀死一个线程 - 你不知道该线程可能正在做什么以及它可能留下什么样的状态。使用带有线程的cancel方法偶尔检查isCanceled允许线程管理它自己的安全性 - 只有当它自行杀死或进行所需的清理时才可以选择这样做。
如果你实际上不需要杀死一个线程但只想等到它结束,请使用join。
如果你绝对需要杀死一个线程,请继续使用stop。只是不要指望你的状态在之后是安全的或一致的 - 这应该只在终止应用程序/活动时才能完成。
答案 1 :(得分:5)
尝试使用类似
的内容service.getThread().interrupt();
service.setThread(null);
或
thread.interrupt();
thread = null;
答案 2 :(得分: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.
}