gpt4 book ai didi

java - 我是否需要关闭 PipedInputStream 和 PipedOutputStream

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:29 26 4
gpt4 key购买 nike

我正在编写一个简单的 Swing GUI,其中包含一个用于打印调试消息和异常的文本字段。我目前在写入 PipedOutputStream 的地方设置了它,并且我有一个守护线程,它从连接的 PipedInputStream 读取并写入文本区域。

当我试图弄清楚如何关闭守护线程中的流时,我遇到了 another answer这表示守护线程不应持有任何资源。管道流计数吗?他们需要关闭吗?

最佳答案

PipedInputStream/PipedOutputStream 不持有任何操作系统资源。所以任何说守护线程不应该持有资源的建议在这里都不适用。 (但见下文!)

但是,这并不意味着您永远不需要close()(至少)PipedOutputStream。根据您的应用程序,相应的 PipedInputStream 可能 需要关闭管道才能完成其工作。


关于 other answer :

看了答案和评论后,我认为他的论点过于笼统:

  • 他是正确的,任何同时打开大量(他说“数百”)资源的东西(守护线程或其他)都是一个坏主意。

  • 他说在守护线程中执行关键 文件更新是有风险的,这也是正确的。但是在 Java 的任何线程中执行关键文件更新具有相同的风险1。或者在 C 中。您只需要将更新序列设计为故障安全...或依靠数据库事务之类的东西来实现故障安全。

但是,将此概括为说守护线程不应该持有资源在逻辑上是不合理的(或在实用上是不合理的)。显然,存在上述问题不适用的用例。


1 - 应用程序可能会收到“kill -9”,这将导致它立即退出, 不会运行关闭 Hook 。应用程序可能会在关键更新过程中出现“文件系统已满”。电源可能会关闭。等等……

关于java - 我是否需要关闭 PipedInputStream 和 PipedOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44223378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com