Я пытаюсь прочитать очень большой файл с помощью Java. Этот большой файл будет иметь такие данные, то есть каждая строка будет иметь идентификатор пользователя.
149905320
1165665384
66969324
886633368
1145241312
286585320
1008665352
И в этом большом файле будет около 30 миллионов идентификаторов пользователя. Теперь я пытаюсь прочитать каждый идентификатор пользователя один за другим из этого большого файла только один раз. Значение каждого идентификатора пользователя должно быть выбрано только один раз из этого большого файла. Например, если у меня есть идентификатор пользователя 30 миллионов, тогда он должен печатать 30 миллионов идентификаторов пользователя только один раз с использованием кода многопоточности.
Ниже приведен код, который является многопоточным кодом, работающим с 10 потоками, но с приведенной ниже программой, я не могу убедиться, что каждый пользовательский идентификатор выбран только один раз.
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();
}
}
}
}
Может кто-нибудь мне помочь? Что я плохо делаю? И какой самый быстрый способ сделать это?