4

我的应用程序中有一个后台线程正在运行,我需要安全地杀死它。除了使用布尔标志之外,我怎样才能杀死 java 中的线程?我读过我不能再使用 thread.stop() 因为它不安全。但有这样做的正确方法吗?有人可以给我一个代码片段吗?

谢谢

4

3 回答 3

8

杀死一个线程在任何语言中都是不安全的——你不知道那个线程可能在做什么以及它可能留下什么状态。使用取消方法和线程偶尔检查 isCanceled 允许线程管理自己的安全性——它可以选择仅在可以安全地杀死自己或进行所需的清理时才这样做。

如果您实际上不需要杀死一个线程,而只是想等到它结束,请使用 join。

如果您绝对需要终止线程,请继续使用 stop。只是不要期望您的状态在之后是安全或一致的 - 这应该只在终止应用程序/活动时完成。

于 2013-05-20T16:20:50.350 回答
5

尝试使用类似的东西

service.getThread().interrupt();
service.setThread(null);

或者

thread.interrupt();
thread = null;
于 2013-05-20T16:22:03.083 回答
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.
}
于 2016-01-24T06:18:31.977 回答