Java 如何在android中终止线程?
我的应用程序中运行了一个后台线程,我需要安全地终止它。除了使用布尔标志外,如何在java中终止线程?我已经读到我不能再使用thread.stop(),因为它不安全。但是有没有一个合适的方法来做到这一点呢?有人能给我一个代码片段吗Java 如何在android中终止线程?,java,android,multithreading,Java,Android,Multithreading,我的应用程序中运行了一个后台线程,我需要安全地终止它。除了使用布尔标志外,如何在java中终止线程?我已经读到我不能再使用thread.stop(),因为它不安全。但是有没有一个合适的方法来做到这一点呢?有人能给我一个代码片段吗 谢谢在任何语言中,杀死线程都是不安全的-你不知道该线程可能在做什么,它可能会留下什么状态。对线程使用cancel方法偶尔检查isCanceled允许线程管理自己的安全性-它可以选择仅在安全的情况下自杀或进行所需的清理 如果您实际上不需要终止线程,但只想等待线程结束,请使
谢谢在任何语言中,杀死线程都是不安全的-你不知道该线程可能在做什么,它可能会留下什么状态。对线程使用cancel方法偶尔检查isCanceled允许线程管理自己的安全性-它可以选择仅在安全的情况下自杀或进行所需的清理 如果您实际上不需要终止线程,但只想等待线程结束,请使用join
如果您确实需要终止线程,请继续并使用stop。只是不要期望您的状态在之后是安全的或一致的-这实际上只应该在终止应用程序/活动时进行
service.getThread().interrupt();
service.setThread(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.
}
private boolean-isThOn//旗帜伊斯顿
延迟时间长;
整数倍;
...
新线程(){
公开募捐{
int i=0;
伊斯顿=真;
while(i)线程将在i=times之前终止(&i)。
}
为什么标记不起作用?线程是否会等待某些事情发生?为什么您不喜欢布尔标记解决方案?我可以使用布尔标记来起作用。但我正在尝试找出是否有其他方法可以起作用?例如,在C中,我想您可以中止线程。是的,您是对的停止()已弃用,使用不安全。我已使用布尔值来停止代码中使用的任何线程。
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.
}