2017-05-28 95 views
1

我在写一个简单的Swing GUI,它包含一个打印调试消息和异常的文本字段。我现在已经将它设置在我写入PipedOutputStream的地方,并且我有一个守护进程线程,它从连接的PipedInputStream中读取并写入文本区域。是否需要关闭PipedInputStream和PipedOutputStream

当我试图弄清楚如何在守护线程中关闭流时,我遇到了another answer,它说守护线程不应该保存任何资源。管道流是否计数?他们需要关闭吗?

+0

你应该关闭任何可以关闭的东西。 – EJP

+0

@EJP我问这个问题的原因是因为我不知道该怎么做。我不相信守护进程线程定义了关闭行为?我认为你可以添加关闭钩子,但如果这很重要,我觉得它会被烘烤。 – Dimpl

回答

2

一个PipedInputStream/PipedOutputStream不抱任何操作系统资源。所以说守护线程不应该占用资源的任何建议都不适用于此。 (不过,见下文!)

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


关于other answer

看答案和意见后,我认为他的说法是一种过度概括:

  • 他是正确的事情(守护线程或者其他)有很多(他说“数百”)的资源同时开放是一个坏主意。

  • 他也正确地说,在守护进程线程中执行严重的文件更新是有风险的。但是严重文件更新任何 Java中的线程具有相同的风险。或者在C中,您只需要设计更新序列以实现故障安全...或者依靠诸如数据库事务之类的方式实现故障安全。

但是,它不是逻辑上合理的(或者实际上是合理的)来概括这个,说守护线程不应该占用资源。很显然,在上述问题不适用的情况下有用例。


1 - 应用程序可能会出现“杀-9”,这将导致其退出立即运行关闭挂钩。应用程序可能会在关键更新中获得“文件系统已满”。权力可能会消失。等等......

相关问题