2014-07-15 46 views
-2

我有螺纹在我的Android应用程序,它完成了它的任务,但它仍然不退出,当我再次运行它,我得到了错误的线程是已经活Android的Java线程不停止

我的线程

Thread mythreads = new Thread() 
    { 
     @Override 
     public void run() { 
     // do some work 

     // exit point  
} 
}; 

所以请我怎样才能制止这种甚至线程完成它执行代码,但是当我尝试再次运行它,它给我的错误

java.lang.IllegalThreadStateException: Thread already started 

我试图阻止它与我的threadkill功能的代码,但没有成功

public void killthread(Thread tname){ 
    try { 
     if (tname.isAlive()) { 
      Log.d("tag1","Thread is Alive"); 
      tname.interrupt(); 
      tname = null; 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 
+0

或许你应该明白当一个线程被视为[活着](http://stackoverflow.com/questions/17293304/when-is-a-java-thread-活着) – chancea

回答

1

线程对象只能启动一次。如果你需要一个stop/interruptThread,然后想再次启动它,你应该创建一个新的实例,并在其上调用start()

thread.interrupt(); 
thread = new YourThreadSubclass(); 
thread.start(); 

在你的情况,你正在做Thread mythreads = new Thread()所以它不应该是一个根本不存在问题,除非您在完成执行前明确地试图阻止它。

创建匿名线程

new Thread() 
{ 
    public void run() { 
     //Your code 
    } 
}.start(); 
+0

所以你不认为它会造成内存问题,因为在特定的时间后,我想开始我的线程,并通过使用你的方法,我必须创建每次新的对象.......我的意思是它会使用更多内存? – user134929

+0

@ user134929它不应该,一旦你创建了线程的新实例,它就会标记旧的垃圾收集(除非你有对你的上下文的隐式引用)。 – zgc7009

+0

你能告诉我如何创建我的线程的新实例,我的意思是我开始我的线程mythreads.start();它完成并仍然活着,所以如何创建新实例?请帮助 – user134929