为什么java的inputstream.close()会阻塞?

我的 Java程序使用ProcessBuilder(redirectErrorStream设置为true)并且有一个循环来运行进程的inputstream的read方法,该方法是阻塞的.我正在调用的外部程序停止等待输入和stdin.我现在想杀死这个过程.这是不是由(在一个单独的线程中)调用进程的destroy方法,并调用inputstream的close方法来阻止read方法阻塞,以便我的初始线程可以结束它的生命?

由于某种原因,process.getInputStream().close()块.从JavaDoc我不明白为什么会发生这种情况.此外,我不明白为什么javadoc说“InputStream的close方法什么都不做”. (link to javadoc)有人可以解释一下吗?

谢谢 :-)

解决方法

关于阻塞行为,Java中存在一个已知问题,当与另一个进程通信时会导致死锁.我不知道这是否是你所看到的,但值得研究. java.lang.Process文件说:

Because some native platforms only provide limited buffer size for standard input and output streams,failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block,and even deadlock.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...