2013-04-17 225 views
0

只是一個小問題,我想stiop以下螺紋的,但我不知道我應該怎麼做。請幫幫我。谷歌幫助這次沒有用。HowTo-線程停止

new Thread(){ 
    public void run() { 
     while(!isInterrupted()){ 
      try { 
       if (sock1!=null){ 
        sock1.setTcpNoDelay(true); 
        if (btsar1.length > 0) { 
         dos1 = new DataOutputStream(sock1.getOutputStream()); 
         bwrtr1 = new BufferedWriter(new OutputStreamWriter(
           dos1), 300); 
         dos1.write(btsar1); 
          set1free = false; 
        Log.e("Communication", "written(1.1)"); 
         Reader1.reader(4);} 
        }} catch (IOException e) { 
        e.printStackTrace(); 
       }catch (NullPointerException e2){ 
        e2.printStackTrace(); 
       } 
      } 
}}.start(); 
//.interrupt(); <-- or kinda that... 

有人可以提供一個好工作的東西,阻止這種情況嗎?

+3

* 「請幫助我。」 *請正確拼寫單詞。這不是一條短信。 –

+0

對不起,我的錯......我有點着急^^ – Ekonion

+0

可能的http://stackoverflow.com/questions/10961714/how-to-properly-stop-the-thread-in-java – Ankit

回答

0

終止線程最好的辦法就是讓它完成。因此,在您的while中添加一個布爾標誌,並且使方法(或其他方法)公開它,以便它可以設置爲false。然後你的線程會在交互完成後自然退出。

1

你只需要一個參考你的線程:

Thread t = new Thread(...); 

然後你就可以中斷它:

t.interrupt(); 
0

一個想法:停止使用匿名線程

每當發現自己處於線程正在做一些複雜事情的情況時,可以創建一個單獨的類來擴展線程,該線程可用於控制和監視行爲,或使用抽象Future和ThreadPool來執行工作。

,如果你繼續使用類似這樣的主題您將有一個非常難以維護和unextendable代碼。

如何優雅地停止一個線程?

bool keepWorking = true; 

while(keepWorking) { 
    // keep working 
} 

synchronized void stopWork() { 
    keepWorking = false; 
} 

// in other thread 
threadObj.stopWork(); 
+0

他的做法是:'while(!interrupted)'比引入一個額外的不必要的布爾標誌更好。尤其是使用可中斷的I/O方法。 – assylias

+0

線程名稱在另一個活動中給出,它從中被調用 – Ekonion

1
Thread t = new Thread(){ 
     ... // content unchanged 
}; 
t.start(); 
..... 
t.interrupt(); 
0

Thread.interrupt方法是停止這種等待很長時間(例如,用於輸入)

看看這條線程 - How to Stop a Thread or a Task

示例


public void stop() { 
      Thread moribund = waiter; 
      waiter = null; 
      moribund.interrupt(); 
     }