1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| daoInfx = new DaoBouchAdministreGds(300);
taskAdm = new ArrayList<>();
for (Administre adm : daoInfx.findAll(false)){
taskAdm.add(new ImportAdministreCallable(adm));
}
// declaration de l'executor en pool de thread limité au nombre de cpu disponible sur la machine
ExecutorService executorAdm = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ExecutorService executorData = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
if (log.isDebugEnabled()) log.debug(" pour " + Runtime.getRuntime().availableProcessors() + " Threads" );
// declaration du Completion service pour traitement des resultats des que disponibles
CompletionService<Administre> completionServiceAdm = new ExecutorCompletionService<>(executorAdm);
CompletionService<Administre> completionServiceData = new ExecutorCompletionService<>(executorData);
// ajout des taches a traiter a la liste de Futurs<T>
for (Callable<Administre> c : taskAdm){
completionServiceAdm.submit(c);
}
executorAdm.shutdown();
// lancement des threads fils.
ImportDataFromAdmCallable task = null;
while(!executorAdm.isTerminated()){
// creation des taches de recuperation des données des qu'un adm est créé
Future<Administre> futAdm = completionServiceAdm.take();
task = new ImportDataFromAdmCallable(futAdm.get());
completionServiceData.submit(task);
}
executorData.shutdown();
executorData.awaitTermination(120, TimeUnit.SECONDS);
log.info ("fin du traitement multiThreads..."); |
Partager