我在寫一個簡單的Swing GUI,它包含一個打印調試消息和異常的文本字段。我現在已經將它設置在我寫入PipedOutputStream的地方,並且我有一個守護進程線程,它從連接的PipedInputStream中讀取並寫入文本區域。是否需要關閉PipedInputStream和PipedOutputStream
當我試圖弄清楚如何在守護線程中關閉流時,我遇到了another answer,它說守護線程不應該保存任何資源。管道流是否計數?他們需要關閉嗎?
我在寫一個簡單的Swing GUI,它包含一個打印調試消息和異常的文本字段。我現在已經將它設置在我寫入PipedOutputStream的地方,並且我有一個守護進程線程,它從連接的PipedInputStream中讀取並寫入文本區域。是否需要關閉PipedInputStream和PipedOutputStream
當我試圖弄清楚如何在守護線程中關閉流時,我遇到了another answer,它說守護線程不應該保存任何資源。管道流是否計數?他們需要關閉嗎?
一個PipedInputStream
/PipedOutputStream
不抱任何操作系統資源。所以說守護線程不應該佔用資源的任何建議都不適用於此。 (不過,見下文!)
但是,這並不意味着你不永遠需要close()
(至少)PipedOutputStream
。根據您的應用程序,相應PipedInputStream
可能需要關閉管道以完成其工作。
關於other answer:
看答案和意見後,我認爲他的說法是一種過度概括:
他是正確的事情(守護線程或者其他)有很多(他說「數百」)的資源同時開放是一個壞主意。
他也正確地說,在守護進程線程中執行嚴重的文件更新是有風險的。但是嚴重文件更新任何 Java中的線程具有相同的風險。或者在C中,您只需要設計更新序列以實現故障安全...或者依靠諸如數據庫事務之類的方式實現故障安全。
但是,它不是邏輯上合理的(或者實際上是合理的)來概括這個,說守護線程不應該佔用資源。很顯然,在上述問題不適用的情況下有用例。
1 - 應用程序可能會出現「殺-9」,這將導致其退出立即不運行關閉掛鉤。應用程序可能會在關鍵更新中獲得「文件系統已滿」。權力可能會消失。等等......
你應該關閉任何可以關閉的東西。 – EJP
@EJP我問這個問題的原因是因爲我不知道該怎麼做。我不相信守護進程線程定義了關閉行爲?我認爲你可以添加關閉鉤子,但如果這很重要,我覺得它會被烘烤。 – Dimpl