2012-11-13 53 views
2
while (active) { 
    String message = reader.readLine(); 
} 


public void stop(){ 
    active = false; 
} 

我怎麼以前readLine()回報String制止這種Thread讀書?停止線程被阻塞從的readLine()方法

+1

什麼?你是不是指「爲什麼」而不是「爲什麼」? –

+0

我不明白。讀線之前你的線程是否停止?如果你不打電話給你的停止方法,有幾個選項可以阻止該線程......但我不確定這是什麼意思。 – Gamb

回答

2

正如你可能已經確定,你的布爾檢查一切都很好,但如果你的網絡線程塊I/O,或者是睡不工作。相反,你需要interrupt這個線程。有關更多詳細信息,請參閱here

1

在這種情況下,您的BufferedReader必須關閉才能解鎖讀線程。

public void stop() { 
    closeQuietly(reader); // unblock 
    active = false; 
} 

public static void closeQuietly(Closable c) { 
    if(c != null) 
     try { 
      c.close(); 
     } catch(IOException ignored) { } 
} 
+0

我沒有發現這個Classe IOUtils – turim

+0

它是Apache通用IO的一部分。其簡單的代碼,你可以添加自己。 –

+0

此方法在BufferReader中執行.close。 當我嘗試這個,我的應用程序崩潰 – turim