Многопоточность Java чтение одного большого файла

Каков эффективный способ для многопоточного приложения Java, где многим потокам нужно прочитать один и тот же файл (размером> 1 ГБ) и представить его в качестве входного потока? Я заметил, что если есть много потоков (> 32), система начинает бороться за ввод-вывод и имеет много ожиданий ввода-вывода.

Я рассмотрел загрузку файла в байтовый массив, который используется всеми потоками - каждый поток создал бы ByteArrayInputStream, но выделение массива байтов в 1 Гб просто не будет работать хорошо.

Я также рассмотрел возможность использования одного FileChannel и каждого потока, создающего InputStream поверх него с помощью Channels.newInputStream (), однако, похоже, что FileChannel поддерживает состояние InputStream.

Ответы на вопрос(4)

Ваш ответ на вопрос