3
while (active) {
   String message = reader.readLine();
}


public void stop(){
   active = false;
}

a を返すThread前にこれを停止するにはどうすればよいですか?readLine()String

4

2 に答える 2

2

お気づきのように、ブール値のチェックは問題なく機能しますが、スレッドがネットワーク I/O でブロックされている場合やスリープしている場合は機能しません。代わりに、このスレッドを中断する必要があります。詳しくはこちらをご覧ください。

于 2012-11-13T16:15:31.553 に答える
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) { }
}
于 2012-11-13T16:20:39.110 に答える