如果我不在java中关闭BufferedReader会发生什么?(多线程程序中的流类型读取)

Dav*_*ave 5 java multithreading stream mkfifo bufferedreader

我有一个多线程程序,我在其中打开一个BufferedReaderFIFO(named Pipe)文件中读取内容.由于我想实现流类型的解决方案来连续读取FIFO文件中的文本,我在线程任务运行之外创建了一个BufferedReader,并且只要应用程序正在运行就希望永远保持打开状态.(bufferedReader上没有close())使用ThreadPool中有限的(比如10个)线程将继续查找FIFO文件中的文本并进一步处理该文本.当我使用FIFO时,它永远不会达到END OF FILE.

通过执行此操作,对于较小的输入文件,它成功读取,对于大型输入文件,它会抛出Stream closed IOexception(偶尔).它自动关闭,我没有close()声明.我有一个代码来获取和关闭semaphore lockbr.readLine()用来处理竞争条件问题的地方

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]
Run Code Online (Sandbox Code Playgroud)

题:

  1. 对于此解决方案,我不想关闭BufferedReader.有什么后果?
  2. 我可以拥有永不关闭的bufferedReader吗?如果是这样,我应该在代码中考虑哪些步骤.

den*_*nov 5

BufferedReader不是一个线程安全的类,因此,我们可以在尝试从不同的线程使用该类的同一对象时获得无数的各种错误.