1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| // Notre liste de tâche à exécuter :
List<Callable<Double>> tasks = ...
// On crée note executeur, qui se chargera d'exécuter les tâches.
// Ici on utile un nombre fixe de thread, basé sur le nombre de processeur
// afin de profiter au mieux des multicores :
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executor = Executors.newFixedThreadPool(processors);
// Mais on pourrait utiliser d'autre types d'executors
// (voir la doc de la classe Executors)
// On exécute toutes les tâches :
// Cette méthode exécute toutes les tâches (selon les règles de l'exécutors)
// et bloque jusqu'à ce qu'elles soient toutes terminée :
Collection<Future<Double>> results = executor.invokeAll(tasks);
// Puis on peut récupérer toutes nos valeurs :
for (Future<Double> result : results) {
System.out.println(result.get());
} |