2012-03-21 156 views
4

我有一個包含可運行的線程。 我需要這個無限循環,除非用戶取消。 我不知道如何去做這件事。所有的幫助非常感謝。 乾杯。你如何循環線程?

+0

簡單地運行一個循環很容易。但是您可能希望線程處理來自主線程的命令/工作項目,對嗎?空閒時睡覺?當被告知時戒菸? – 2012-03-21 20:17:50

回答

9

我需要這個無限循環,除非用戶取消。

很明顯,你可以輕鬆地添加里面的run()方法的循環:

new Thread(new Runnable() { 
     public void run() { 
      while (true) { 
      // do something in the loop 
      } 
     } 
    }).start(); 

它總是一個好主意,檢查線程中斷:

new Thread(new Runnable() { 
     public void run() { 
      // loop until the thread is interrupted 
      while (!Thread.currentThread().isInterrupted()) { 
      // do something in the loop 
      } 
     } 
    }).start(); 

如果你問如何你可以從另一個線程(如UI線程)中取消一個線程操作,那麼你可以這樣做:

private final volatile running = true; 
... 
new Thread(new Runnable() { 
    public void run() { 
     while (running) { 
      // do something in the loop 
     } 
    } 
}).start(); 
... 

// later, in another thread, you can shut it down by setting running to false 
running = false; 

我們需要使用volatile boolean,以便在另一個線程中看到一個線程中字段的更改。

+0

完美的迴應。這就是我需要的一切。乾杯。 – 2012-03-21 20:34:06

+0

使用volatile布爾變量是安全的。所有對原始(和引用)類型的讀寫操作都是原子的(有時除了long和double)。 AtomicBoolean變量是一種矯枉過正,我想。 – Vladimir 2012-03-21 20:38:19

+0

不知道這是「矯枉過正」本身@弗拉基米爾,但'揮發性'也將工作,是的。 – Gray 2012-03-21 20:41:27