2012-10-16 46 views
0
Thread thread;  

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_yippi); 
final Handler hn=new Handler(); 
final TextView text=(TextView)findViewById(R.id.TextView01); 
final Runnable r = new Runnable() 
{ 
    public void run() 
    { 
     text.settext("hi"); 
    } 
}; 
thread = new Thread() 
{ 

    @Override 
    public void run() { 
     try { 
      while(true) { 
       sleep(1750); 
       hn.post(r); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 
    thread.start(); 
thread.stop();} 

這裏的代碼。我無法停止可運行線程。另外,不建議使用thread.stop()thread.destroy()。有人能幫助我嗎?而且我也不明白如何用thread.interrupt()方法停止線程。怎麼了?我無法完成線程(可運行),它是怎麼回事?

+0

該文檔幾乎完全回答您的問題http://docs.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html –

+0

如何在發佈之前先格式化您的代碼?這並不困難(大多數IDE提供了一種自動的方式),並且它表明您至少在意我們必須讀取該代碼的事實......; – brimborium

回答

2

的使用Thread.stop(,JavaDoc會)列出了下面的文章的解釋爲什麼停止()被棄用:http://docs.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

大部分停止使用應該通過代碼來代替只是簡單地修改一些變量來表明目標線程應該停止運行。目標線程應該定期檢查這個變量,並且如果變量指示它將停止運行,則從其run方法有序地返回。爲確保停止請求的即時通信,變量必須是易失性的(或者必須同步對變量的訪問)。

interrupt()更適合阻止某些Thread等待某些東西,這可能不會再出現。如果你想結束這個線程,最好讓它的run()方法返回。

0

創建一個布爾變量來停止線程,並在while(boolean)而不是while(true)中使用它。

+0

變量應該定義爲volatile –

0

您可以使用Thread.interrupt()來觸發線程中的InterruptedException。我在下面添加了代碼來演示行爲。 mainThread是你的代碼的地方,定時器Thread只是用來演示延遲觸發的中斷。

public class Test { 

    public static void main(String[] args) { 

     final Thread mainThread = new Thread() { 

      @Override 
      public void run() { 
       boolean continueExecution = true; 

       while (continueExecution) { 
        try { 
         sleep(100); 
         System.out.println("Executing"); 
        } catch (InterruptedException e) { 
         continueExecution = false; 
        } 
       } 

      } 
     }; 

     mainThread.start(); 

     Thread timer = new Thread() { 
      @Override 
      public void run() { 

       try { 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       System.out.println("Stopping recurring execution"); 
       mainThread.interrupt(); 

      } 
     }; 
     timer.start(); 
    } 
} 
0

您可以使用Thread的中斷方法來嘗試停止線程,如下面的代碼。 可能對你有用。

public class InterruptThread { 

    public static void main(String args[]){ 

     Thread thread = new Thread() 
     { 

     @Override 
     public void run() { 
      try { 
       while(true) { 
        System.out.println("Thread is Runing......"); 
        sleep(1000); 
       } 
      } catch (InterruptedException e) { 
       // restore interrupted status 
       System.out.println("Thread is interrupting"); 
       Thread.currentThread().interrupt(); 
      } 
     } 
     }; 
     thread.start(); 

     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
    } 

    System.out.println("Will Interrupt thread"); 
    thread.interrupt(); 
    } 

}