流readLine以中断关闭

问题描述:

我有一个线程,它从getInputStream读取输入Process。它等待readLine。流readLine以中断关闭

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

但事实证明,readLine不响应中断状态。所以在关机期间,它不会让JVM关机。在浏览源代码时,它看起来只是轮询直到有一个\n行终止字符。

任何替代品或黑客?

PS:它是How to interrupt BufferedReader's readLine的副本。因此,我将结束它

+1

'process.getInputStream'中是否缺少'()'? – 2013-03-25 12:57:27

+0

你如何中断'readLine()'? – 2013-03-25 12:58:58

+0

我中断正在执行它的线程 – Jatin 2013-03-25 13:04:14

它不应该是:

while(!Thread.currentThread().isInterrupted()){ 
+0

是。错误,更新了代码。谢谢 – Jatin 2013-03-25 12:43:02

+1

@贾丁很高兴帮助,不要忘记验证答案;) – LaGrandMere 2013-03-25 13:16:00

可靠的方法来停止一个进程是Process.destroy。在字段中保存对进程的引用并调用Process.destroy,而不是中断该线程。

Thread.interrupt

如果该线程时然后可中断信道的信道将被关闭阻止在I/O操作时,该线程的中断状态将被设置,并且线程将收到一个ClosedByInterruptException。

但是BufferedReader未执行InterruptibleChannel。所以,这就是为什么你的线程卡在readLine()的调用中。