什么是Java多线程应用程序的有效方法,其中许多线程必须读取完全相同的文件(大小> 1GB)并将其作为输入流公开?我注意到如果有很多线程(> 32),系统开始竞争I/O并且有很多I/O等待.
我已经考虑将文件加载到由所有线程共享的字节数组中 - 每个线程都会创建一个ByteArrayInputStream,但是分配1GB字节数组将无法正常工作.
我还考虑使用单个FileChannel,每个线程使用Channels.newInputStream()在其上创建一个InputStream,但似乎FileChannel维护InputStream的状态.