我有一个线程,它从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的副本。因此,我正在关闭它
答案 0 :(得分:2)
不应该是:
while(!Thread.currentThread().isInterrupted()){
答案 1 :(得分:1)
停止进程的可靠方法是Process.destroy。在字段中保存对进程的引用,并调用Process.destroy而不是中断线程。
答案 2 :(得分:0)
如果此线程在可中断通道上的I / O操作中被阻塞,则通道将关闭,线程的中断状态将被设置,线程将收到ClosedByInterruptException。
但BufferedReader
未实现InterruptibleChannel
。所以,这就是你的线程卡在readLine()
的调用中的原因。