Tengo un archivo .csv que contiene más de 70 millones de líneas de las cuales cada línea generará un Runnable y luego se ejecutará por threadpool. Este Runnable insertará un registro en Mysql.¿Cómo se puede reutilizar un threadpool después del cierre
Además, quiero registrar una posición del archivo csv para RandomAccessFile para localizar. La posición se escribe en un archivo . Quiero escribir este registro cuando todos los subprocesos en el subproceso se terminan. Se invoca ThreadPoolExecutor.shutdown(). Pero cuando lleguen más líneas, necesito un subproceso de nuevo. ¿Cómo puedo reutilizar este grupo de temas actual en lugar de crear uno nuevo?
El código es el siguiente:
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;
}
Gracias!
¿Cómo fuerzo detener los hilos o cancelar todas las tareas? usando exectuer.shutdownNow()? ¿Funcionará bien incluso con este envoltorio? –