流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的副本。因此,我将结束它
它不应该是:
while(!Thread.currentThread().isInterrupted()){
是。错误,更新了代码。谢谢 – Jatin 2013-03-25 12:43:02
@贾丁很高兴帮助,不要忘记验证答案;) – LaGrandMere 2013-03-25 13:16:00
可靠的方法来停止一个进程是Process.destroy。在字段中保存对进程的引用并调用Process.destroy,而不是中断该线程。
如果该线程时然后可中断信道的信道将被关闭阻止在I/O操作时,该线程的中断状态将被设置,并且线程将收到一个ClosedByInterruptException。
但是BufferedReader
未执行InterruptibleChannel
。所以,这就是为什么你的线程卡在readLine()
的调用中。
'process.getInputStream'中是否缺少'()'? – 2013-03-25 12:57:27
你如何中断'readLine()'? – 2013-03-25 12:58:58
我中断正在执行它的线程 – Jatin 2013-03-25 13:04:14