我有一个多线程程序,在其中我打开一个BufferedReader
从FIFO(named Pipe)
文件中读取内容。因为我想实现流类型解决方案来不断地从先进先出文件中读取文本,所以我在线程任务运行之外创建了一个BufferedReader,并希望只要应用程序正在运行就永远保持打开。(在bufferedReader上不使用close() )在ThreadPool中使用有限的(比方说10)线程将继续在先进先出文件中查找文本并进一步处理该文本。因为我使用的是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]
问题:
发布于 2018-10-06 00:50:49
BufferedReader不是一个线程安全的类,因此,当我们试图从不同的线程使用该类的同一对象时,我们可能会得到无数的各种错误。
https://stackoverflow.com/questions/52669663
复制相似问题