流readLine以中断关闭

时间:2013-03-25 12:39:47

标签: java

我有一个线程,它从getInputStream的{​​{1}}读取输入。它等待readLine。

Process

但事实证明BufferedReader read = new BufferedReader(new InputStreamReader(process.getInputStream)); while(!Thread.currentThread().isInterrupted()){ String s = read.readLine(); process(s); } 没有响应中断状态。因此在关机期间,它不会让JVM关闭。在浏览源代码时,它看起来只是轮询直到有一个readLine行终止字符。

任何替代方案或黑客攻击?

PS:它是How to interrupt BufferedReader's readLine的副本。因此,我正在关闭它

3 个答案:

答案 0 :(得分:2)

不应该是:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

来自Thread.interrupt

  

如果此线程在可中断通道上的I / O操作中被阻塞,则通道将关闭,线程的中断状态将被设置,线程将收到ClosedByInterruptException。

BufferedReader未实现InterruptibleChannel。所以,这就是你的线程卡在readLine()的调用中的原因。