Java 如何在android中终止线程?

Java 如何在android中终止线程?,java,android,multithreading,Java,Android,Multithreading,我的应用程序中运行了一个后台线程,我需要安全地终止它。除了使用布尔标志外,如何在java中终止线程?我已经读到我不能再使用thread.stop(),因为它不安全。但是有没有一个合适的方法来做到这一点呢?有人能给我一个代码片段吗 谢谢在任何语言中,杀死线程都是不安全的-你不知道该线程可能在做什么,它可能会留下什么状态。对线程使用cancel方法偶尔检查isCanceled允许线程管理自己的安全性-它可以选择仅在安全的情况下自杀或进行所需的清理 如果您实际上不需要终止线程,但只想等待线程结束,请使

我的应用程序中运行了一个后台线程,我需要安全地终止它。除了使用布尔标志外,如何在java中终止线程?我已经读到我不能再使用thread.stop(),因为它不安全。但是有没有一个合适的方法来做到这一点呢?有人能给我一个代码片段吗


谢谢

在任何语言中,杀死线程都是不安全的-你不知道该线程可能在做什么,它可能会留下什么状态。对线程使用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.
}