2017-05-28 141 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」,這將導致其退出立即運行關閉掛鉤。應用程序可能會在關鍵更新中獲得「文件系統已滿」。權力可能會消失。等等......

相關問題