Возможно, было бы более производительным читать файл построчно в одном потоке и передавать полученные строки ввода в пул потоков через очередь, такую как ConcurrentLinkedQueue , если вы хотите гарантировать порядок Наименьшее из начала обработки строк файлов. Гораздо проще реализовать, и нет конкуренции за класс, который вы используете для чтения файла.
Если нет какой-либо чугунной причины, по которой вам нужно чтение, чтобы оно происходило локально для каждого потока, я бы не стал делиться таким файлом.