2

getInputStreamからの入力を読み取るスレッドがありますProcess。readLine を待ちます。

BufferedReader read = new BufferedReader(new InputStreamReader(process.getInputStream));
while(!Thread.currentThread().isInterrupted()){
String s = read.readLine();
process(s);
}

readLineしかし、割り込みステータスに応答しないことが判明しました。したがって、シャットダウン中は、JVM をシャットダウンできません。ソース コードを参照すると、行末文字が含まれるまでポーリングしているように見えます\n

代替案やハックはありますか?

PS: BufferedReader の readLine を中断する方法の複製です。したがって、私はそれを閉じています

4

3 に答える 3

2

そうではありませんか:

while(!Thread.currentThread().isInterrupted()){
于 2013-03-25T12:42:23.920 に答える
1

プロセスを停止する信頼できる方法は、Process.destroy です。プロセスへの参照をフィールドに保存し、スレッドを中断する代わりに Process.destroy を呼び出します。

于 2013-03-25T13:10:42.727 に答える
0

からThread.interrupt

このスレッドが割り込み可能なチャネルでの I/O 操作でブロックされた場合、チャネルは閉じられ、スレッドの割り込みステータスが設定され、スレッドは ClosedByInterruptException を受け取ります。

しかしBufferedReader、実装していませんInterruptibleChannel。したがって、これがスレッドが への呼び出しでスタックしている理由readLine()です。

于 2013-03-25T13:12:24.717 に答える