簡體   English   中英

如果我沒有在Java中關閉BufferedReader會發生什么? (在多線程程序中讀取流類型)

[英]What happens if I do not close BufferedReader in java? (Stream type reading in multi-threaded program)

我有一個多線程程序,其中打開BufferedReader以從FIFO(named Pipe)文件中讀取內容。 因為我要實現解決方案的流類型以連續從FIFO文件讀取文本,所以我在線程任務運行之外創建了BufferedReader,並且希望在應用程序運行時一直保持打開狀態。(bufferedReader上沒有close())在有限的情況下(假設為10),ThreadPool中的線程將繼續在FIFO文件中查找文本,並進一步處理該文本。 當我使用FIFO時,它將永遠不會到達文件尾。

這樣,對於較小的輸入文件,它會成功讀取;對於較大的輸入文件,它會拋出Stream closed IOexception (偶爾)。 它會自動關閉,我沒有close()語句。 我在我使用br.readLine()處理競爭狀況問題的地方獲取並關閉了semaphore lock的代碼到位

java.io.IOException: Stream closed
    at java.io.BufferedReader.ensureOpen(BufferedReader.java:122) ~[?:1.8.0_152]
    at java.io.BufferedReader.readLine(BufferedReader.java:317) ~[?:1.8.0_152]
    at java.io.BufferedReader.readLine(BufferedReader.java:389) ~[?:1.8.0_152]

題:

  1. 對於此解決方案,我不想關閉BufferedReader。 有什么后果?
  2. 我可以擁有一個永遠不會關閉的bufferedReader嗎? 如果是這樣,我應該在代碼中考慮哪些步驟。

BufferedReader不是線程安全的類,因此,當嘗試從不同的線程使用該類的同一對象時,我們會得到無數的各種錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM