2015-06-06 47 views
0

所以我有一个非常简单,可能是愚蠢的问题,抱歉,但我真的不知道为什么这个线程只运行一次?为什么线程只运行一次

new Thread(new Runnable() { 

    public void run() { 
     try { 
      Thread.sleep(3000); 
      Log.e("comes here", "opr"); 
      if (done) { 
       call(tv); 
       done = false; 
       Log.e("comes here","andr"); 
       Thread.currentThread().interrupt(); 
       Thread.currentThread().stop(); 
      } 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch 
      // block 
      e.printStackTrace(); 
     } 

    } 
}).start(); 

我调试它在这里终止

Thread.sleep(3000); 
Log.e("comes here", "opr"); 

,它应该再重新运行,并再次直到done =true

更新

现在线程不会终止

new Thread(new Runnable() { 

    public void run() { 
     do { 
      try { 
       Thread.sleep(3000); 
       Log.e("comes here","opr"); 
       if (done) { 
        call(tvv); 
        done = false; 
        Log.e("comes here","andr"); 
        Thread.currentThread().interrupt(); 
        //Thread.currentThread().stop(); 
       } 
      } catch (InterruptedException e) { 
       // TODO Auto-generated 
       // catch 
       // block 
       e.printStackTrace(); 
      } 
     } while (!done); 
    } 
}).start(); 

我不能在这之后设置done=false,因为我需要它。

感谢

+2

将它包围在'while(!done){/ * ... * /}'循环中。 – nhaarman

+3

调用'Thread.start()'调用'Thread.run()'一次。在run(){...}内使用一个循环来反复执行,或者使用一个定时器以固定的速度调度线程的执行。 –

+0

感谢@nhaarman它的工作。但请立即看到更新。 –

回答

2

执行后run()方法的线程被认为是已完成DEAD,使其只运行一次。

如果你想多次调用它,你可以使用循环更新你的问题。