我有一个主程序,它在目标设备(智能手机)上运行脚本,并在while循环中等待stdout消息。然而,在这种特殊情况下,stdout上的某些心跳消息可能会间隔近45秒到1分钟。
类似于:
stream = device.runProgram(RESTORE_LOGS, new String[] {});
stream.flush();
String line = stream.readLine();
while (line.compareTo("") != 0) {
reporter.commentOnJob(jobId, line);
line = stream.readLine();
}
所以,我想在从标准输出读取一行后启动一个可中断的新线程,并需要一个睡眠窗口。在能够读取新行后,我想能够中断/停止(有问题无法杀死进程),处理stdout文本的换行符并重新启动进程。
如果在计时器窗口内(比如45秒)无法读取一行,则希望有一种方法退出while循环。
我已经尝试了thread.run、thread.interrupt方法。但是遇到了杀死和启动新线程的问题。
这是最好的解决方案还是我漏掉了一些明显的东西?
IOException
...这就是你所看到的。在这种情况下,我将更新我的答案以显示如何平稳地终止循环。 - ericksonnull
赋值给t
不会起到任何作用。read()
方法在当前的interrupt()
之后立即返回,并且t
所属的堆栈帧消失了,但是该Thread
仍然会继续运行,阻塞在读取操作中。不过,正如我所说,这完全取决于底层的InputStream
实现是否可以异步关闭。 - erickson