如何阻止线程?

时间:2011-01-21 08:43:56

标签: android multithreading

当线程处于活动状态时,如何停止线程?我给了像

if(thread.isAlive()){
    thread.stop();
}

但不推荐使用方法stop并抛出异常

01-21 14:12:40.188: ERROR/global(535):     Deprecated Thread methods are not supported.
01-21 14:12:40.188: ERROR/global(535):    java.lang.UnsupportedOperationException
01-21 14:12:40.188: ERROR/global(535):     at java.lang.VMThread.stop(VMThread.java:85)
01-21 14:12:40.188: ERROR/global(535):     at java.lang.Thread.stop(Thread.java:1379)
01-21 14:12:40.188: ERROR/global(535):     at java.lang.Thread.stop(Thread.java:1344)

我们如何解决这个问题?

4 个答案:

答案 0 :(得分:37)

一般情况下,您不会强行停止线程,因为它很危险。你设置了一个标志,告诉有问题的线程在受控环境下退出它的线程循环。

你的线程循环看起来像这样:

void run() {
  while (shouldContinue) {
    doThreadWorkUnit();
  }
}

在其他地方设置shouldContinue变量并等待线程完成:

...
thread.shouldContinue = false;
thread.join();
...

(所有这些可能都不正确Java,因为我不做Java。将其视为伪代码并修改您的实际语言/线程库/等。)

答案 1 :(得分:3)

以下是Java人员为什么不调用thread.stop以及做什么而言必须说的。

http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

简短的回答是,您允许线程入口点函数返回。

答案 2 :(得分:2)

最好你必须使用这种线程方法来阻止它。

Thread.interrupt();

这样你也可以保存线程的状态。

答案 3 :(得分:0)

在非循环线程实现中,你总是可以在线程代码的最开头使用这样的东西:

void run() {
    if (!shouldContinue) { 
       return 1; 
    } 
    .. 
    then rest of the thread code
    ..
 }