У меня есть .csv файл, содержащий более 70 миллионов строк, из которых каждая строка должна генерировать Runnable, а затем выполняется threadpool. Этот Runnable будет вставлять запись в Mysql.
Что еще, я хочу записать позицию файла csv для RandomAccessFile, чтобы найти. Позиция написана на Файл. Я хочу записать эту запись, когда все потоки в threadpool закончены. Вызывается ThreadPoolExecutor.shutdown(). Но когда приходит больше строк, мне снова нужен поток. Как я могу повторно использовать этот текущий поток, вместо того, чтобы создавать новый.
Код выглядит следующим образом:
public static boolean processPage() throws Exception {
long pos = getPosition();
long start = System.currentTimeMillis();
raf.seek(pos);
if(pos==0)
raf.readLine();
for (int i = 0; i < PAGESIZE; i++) {
String lineStr = raf.readLine();
if (lineStr == null)
return false;
String[] line = lineStr.split(",");
final ExperienceLogDO log = CsvExperienceLog.generateLog(line);
//System.out.println("userId: "+log.getUserId()%512);
pool.execute(new Runnable(){
public void run(){
try {
experienceService.insertExperienceLog(log);
} catch (BaseException e) {
e.printStackTrace();
}
}
});
long end = System.currentTimeMillis();
}
BufferedWriter resultWriter = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(new File(
RESULT_FILENAME), true)));
resultWriter.write("\n");
resultWriter.write(String.valueOf(raf.getFilePointer()));
resultWriter.close();
long time = System.currentTimeMillis()-start;
System.out.println(time);
return true;
}
Спасибо!