Ho un file .csv contenente oltre 70 milioni di righe di cui ogni riga deve generare un eseguibile e quindi eseguito da threadpool. Questo Runnable inserirà un record in Mysql.Come riutilizzare un pool di thread dopo lo spegnimento
Cosa c'è di più, voglio registrare una posizione del file CSV per il RandomAccessFile da individuare. La posizione è scritta in un file . Desidero scrivere questo record quando tutti i thread in threadpool sono terminati. Viene richiamato ThreadPoolExecutor.shutdown(). Ma quando arrivano più linee, ho bisogno di un nuovo threadpool. Come posso riutilizzare questo threadpool corrente invece di crearne uno nuovo.
Il codice è il seguente:
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;
}
Grazie!
come posso forzare l'arresto dei thread o annullare tutte le attività? usando exectuer.shutdownNow()? funzionerà bene anche con questo wrapper? –