我正在尝试使用 Java 读取一个非常大的文件。那个大文件会有这样的数据,这意味着每一行都有一个用户 ID。
149905320
1165665384
66969324
886633368
1145241312
286585320
1008665352
在那个大文件中将有大约 3000 万个用户 ID。现在我试图从那个大文件中一一读取所有用户 ID 一次。这意味着每个用户 ID 只能从该大文件中选择一次。例如,如果我有 3000 万个用户 ID,那么它应该使用多线程代码只打印一次 3000 万个用户 ID。
下面是我的代码,它是一个运行 10 个线程的多线程代码,但是使用下面的程序,我无法确保每个用户 ID 只被选择一次。
public class ReadingFile {
public static void main(String[] args) {
// create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
service.submit(new FileTask());
}
}
}
class FileTask implements Runnable {
@Override
public void run() {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("D:/abc.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
//do things with line
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
有人可以帮我吗?我做错了什么?最快的方法是什么?