微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐