在Java中使用多线程来读取数据

use*_*866 3 java multithreading

我正在考虑如何在程序中使用线程.现在我有一个单线程程序,读取一个巨大的文件.非常简单的程序,只是逐行读取并收集有关单词的一些统计信息.现在,我想使用多线程来加快速度.我不知道如何处理这个问题.

一种解决方案是预先将数据分成X个片段,然后有X个线程,每个线程同时在一个片段上运行,使用一个同步方法将统计信息写入内存.有更好的方法吗?具体来说,我想避免提前分离数据.

谢谢!

Pon*_*gge 10

首先,进行一些分析以确保您的进程实际上是计算绑定的,而不是I/O绑定.也就是说,您的统计信息收集比访问该文件要慢.否则,多线程会降低程序速度,而不是加速程序,特别是如果您在单核CPU(或古老的JVM)上运行.

还要考虑:如果您的文件驻留在硬盘驱动器上:您将如何安排读取?你冒险添加硬盘寻道延迟,否则,阻止所有已经设法完成其工作块的线程,而一个线程要求硬盘寻找位置0x03457000 ......