2013-05-02 85 views
2

我有一個運行一個Runnable,看起來像一個線程:停止一個線程只有一個操作

Runnable run = new Runnable() { 
    @Override 
    public void run() { 
     functionCall(); 
    } 

}; 
Thread thread = new Thread(run); 
thread.start(); 

void functionCall() { 
    for (int i=0; i<1000000; i++) System.out.println(i); 
} 

而且我想阻止它無論發生什麼。我已經嘗試過thread.interrupt(),但我還沒有能夠使它工作,因爲functionCall()方法並不真的依賴於我(我不知道里面的功能,這只是一個例子)。

據我所見,每個人都使用一個易變的布爾變量來檢查它,但這個線程只執行一次,所以它不是我真正需要的。

+0

恐怕這不是線程在Java中的工作方式。如果代碼對中斷沒有反應,那麼你可以做的事情不多。 – Thilo 2013-05-02 09:32:37

+0

@Thilo _「沒有太多你可以做」_?那麼他能做些什麼呢? – Kai 2013-05-02 09:34:18

+0

確保你正在中斷正確的線程 - 很容易意外打斷你自己的線程,而不會注意到你的錯誤。 – OldCurmudgeon 2013-05-02 09:34:28

回答

2

Thread.interrupt()要求調用線程來控制OS(用於IO訪問,睡眠等)。所以爲了使用它,你需要確保你的線程完成這個任務(即不是單純的計算)。有關更多信息,請參閱this JavaSpecialists條目。

+0

要重新說明這一點:如果代碼對中斷沒有反應,那麼您可以做的事情就不多了。 – Thilo 2013-05-02 09:34:05

+0

這是一個很好的總結.... – 2013-05-02 09:36:28

+0

謝謝你們兩個,其實我一方面不理解它 – 2013-05-02 09:52:39