У меня есть многопоточная программа, в которой я открываю BufferedReader
для чтения содержимого из FIFO(named Pipe)
файла. Поскольку я хочу внедрить потоковое решение для непрерывного чтения текста из файла FIFO, я создал BufferedReader вне выполнения задачи потока и хочу, чтобы он оставался открытым навсегда, пока приложение работает. (Нет close() на bufferedReader) С ограниченным (скажем, 10) потоком в ThreadPool будет продолжать искать текст в файле FIFO и обрабатывать этот текст для дальнейшей обработки. Поскольку я использую FIFO, он никогда не достигнет END OF FILE.
Делая это, для меньшего входного файла он читает успешно, для большого входного файла он выдает 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. Каковы последствия?
- Могу ли я иметь буферизованный читатель, который никогда не закрывается? если да, то какие шаги я должен рассмотреть в коде.