У меня есть многопоточная программа, в которой я открываю 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]
Вопрос:
- Для этогоРешение Я не хочу закрывать BufferedReader.Каковы последствия?
- Могу ли я иметь bufferedReader, который никогда не будет закрыт?если да, то какие шаги я должен рассмотреть в коде.