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