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

前端之家收集整理的这篇文章主要介绍了为什么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.

猜你在找的Java相关文章