2016-07-11 114 views
0

我做了一個將字符串定期發送回主線程的線程。 和我把這個線程放在一些函數上。調用兩次時殺死線程

當我按下某個按鈕時,功能將被調用並完成工作。

問題是當我按下該按鈕兩次。

這兩個線程正在將它們的字符串發送到主線程。 (他們完全一樣的東西,但不同的字符串。)

但是,當線程再次啓動時,我不需要第一個線程。

他們有什麼辦法殺死第一個線程?

這是代碼。

private void speller_textbox(final String string){ 
    final int strlen = string.length(); 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      int cursor= 0; 
      while(cursor != strlen){ 
       try{ 
        Message message = Message.obtain(); 
        message.obj = string.subSequence(0,cursor); 
        txt_handler.sendMessage(message); 
        cursor++; 
        Thread.sleep(100); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    thread.start(); 
} 

txt_handler位於主線程上。

+0

問題如何確定是否有一個線程需要被殺死,或如何殺死它們,或兩者? –

+0

好,都。我需要確定並殺死它。 –

+2

你不會真的「殺死」線程。 'Thread'上有'stop'和'destroy'這樣的方法,但是它們被強烈的棄用。你所能做的只是中斷一個正在運行的線程,並以一種可以檢查中斷並儘快停止的方式實現它。 –

回答

-1

首先從方法中替換您的工作線程。比:

private Thread workingThread; 

//..... 

private void speller_textbox(final String string){ 

    if (workingThread != null && workingThread.isAlive()) { 
     workingThread.interrupt(); 
    } 

    final int strlen = string.length(); 
    workingThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      int cursor= 0; 
      while(cursor != strlen){ 
       try{ 
        Message message = Message.obtain(); 
        message.obj = string.subSequence(0,cursor); 
        txt_handler.sendMessage(message); 
        cursor++; 
        Thread.sleep(100); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    thread.start(); 
} 
+0

第一次調用之後'workingThread'永遠不會爲空,即使它完成後也是如此。 – njzk2

+0

@ njzk2哈哈?再次檢查答案... – GensaGames

+0

你知道什麼'interrupt()'嗎? – njzk2