Что произойдет, если я не закрою BufferedReader в Java?(Чтение типа потока в многопоточной программе) - PullRequest
0 голосов
/ 05 октября 2018

У меня есть многопоточная программа, в которой я открываю BufferedReader для чтения содержимого из файла FIFO(named Pipe).Поскольку я хочу реализовать потоковый тип решения для непрерывного чтения текста из файла FIFO, я создал BufferedReader вне выполнения задачи потока и хочу, чтобы он оставался открытым до тех пор, пока приложение работает. (Нет close () для bufferedReader)С ограниченным (скажем, 10) потоками в ThreadPool будет продолжать искать текст в файле FIFO и обрабатывать этот текст для дальнейшей работы.Поскольку я использую FIFO, он никогда не достигнет конца файла.

Делая это, для меньшего входного файла он читает успешно, для большого входного файла он выбрасывает Stream closed IOexception (время от времени).Он закрывается автоматически, у меня нет close() заявления.У меня есть код для получения и закрытия semaphore lock в том месте, где я использую br.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]

Вопрос:

  1. Для этогоРешение Я не хочу закрывать BufferedReader.Каковы последствия?
  2. Могу ли я иметь bufferedReader, который никогда не будет закрыт?если да, то какие шаги я должен рассмотреть в коде.

1 Ответ

0 голосов
/ 05 октября 2018

BufferedReader не является потокобезопасным классом, поэтому мы можем получить несчетное количество различных ошибок при попытке использовать один и тот же объект этого класса из разных потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...