我有一个后台线程在我的应用程序中运行,我需要安全地杀死它。除了使用布尔型标志,我怎样才能杀死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#中的一个例子,我认为你可以中止一个线程。 –