2013-05-20 84 views
4

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

感谢

+1

为什么一个标志不起作用?线程是否等待发生什么? –

+0

为什么你不喜欢布尔标志解决方案? – hoaz

+0

我可以使用布尔标志来工作。但我试图找出是否有另一种方式做到这一点?作为C#中的一个例子,我认为你可以中止一个线程。 –

回答

8

其在任何语言绝对不安全的杀thread-你不知道这是什么的线程可以做,什么状态时,它可能会留下。通过线程偶尔检查isCanceled使用cancel方法可以让线程管理自己的安全 - 只有在自己可以安全地自行杀死或进行所需的清理时,才可以选择这种方式。

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

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

+0

是的,你是正确的停止()已被弃用,它是不安全的使用。我已经使用布尔值来停止我在代码中使用的所有线程。 –

5

尝试使用类似

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

或者

thread.interrupt(); 
thread = null; 
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. 
}