Comment un pool de threads être réutilisés après l'arrêt

J'ai un .fichier csv contenant plus de 70 millions de lignes dont chaque ligne est de générer un Praticable, puis exécuté par le pool de threads. Cet Exécutable va insérer un enregistrement dans Mysql.

Qui plus est , je veux enregistrer une position du fichier csv pour la RandomAccessFile à localiser. La position est écrit dans un Fichier.Je veux écrire cet enregistrement lorsque tous les threads dans le pool de threads sont finis.Donc ThreadPoolExecutor.shutdown() est invoquée. Mais quand plus de lignes de venir, j'ai besoin d'un pool de threads de nouveau. Comment puis-je réutiliser ce courant de pool de threads au lieu d'en faire une nouvelle.

Le code est comme suit:

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;
}

Merci !

InformationsquelleAutor Southeast | 2011-10-11