2

我有一个线程,它getInputStreamProcess. 它等待 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 回答