首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我没有在java中关闭BufferedReader,会发生什么?(多线程程序中的流类型读取)

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

Stack Overflow用户
提问于 2018-10-06 00:15:39
回答 1查看 350关注 0票数 5

我有一个多线程程序,在其中我打开一个BufferedReaderFIFO(named Pipe)文件中读取内容。因为我想实现流类型解决方案来不断地从先进先出文件中读取文本,所以我在线程任务运行之外创建了一个BufferedReader,并希望只要应用程序正在运行就永远保持打开。(在bufferedReader上不使用close() )在ThreadPool中使用有限的(比方说10)线程将继续在先进先出文件中查找文本并进一步处理该文本。因为我使用的是FIFO,它永远不会到达文件的末尾。

这样,对于较小的输入文件,它会成功读取;对于较大的输入文件,它会抛出Stream closed IOexception(偶尔)。它自动关闭,我没有close()语句。在我使用br.readLine()处理竞争条件问题的地方,我有一段代码用来获取和关闭semaphore lock

代码语言:javascript
运行
复制
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。我有一个永远不会关闭的bufferedReader,什么是consequences?
  2. Can?如果是这样,我应该在代码中考虑哪些步骤。
EN

回答 1

Stack Overflow用户

发布于 2018-10-06 00:50:49

BufferedReader不是一个线程安全的类,因此,当我们试图从不同的线程使用该类的同一对象时,我们可能会得到无数的各种错误。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52669663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档