Le gars a 1 million de particules dont il veut calculer les couleurs et je ne sais quoi. Dans un tableau particles[1000000]
Le nombre justifie de paralléliser le travail en tâches.
Il calcule availableProcessors donc il connait le nombre de particules par tâche particlesPerTask = 1E6 / availableProcessors;
Enfin, il déclare une liste de tâches : tasks = new ArrayList<Task>(); et y ajoute des Task.
Les Tasks parallélisent le calcul du tableau de particules, chacune sait ou démarrer et ou s'arrêter dans le tableau particles[] grâce aux paramètres du constructeur de Task.
Chaque Task calcule les couleurs des Particle en fonction des mouvements souris.
Le top départ semble donner par le executorService.invokeAll(tasks);
Comme chacune des Task de tasks sont Callable, j'imagine que toute la mécanique qui va bien se déroule grâce aux bonnes implémentations (cela sert à cela).
NB1 : l'exemple est trop facile, deux tâches ne gèrent jamais la même donnée particles[p], ce qui créerait des problèmes de concurrence et serait proches d'exemples concrets.
NB2 : A priori chaque Task va réagir de même manière aux mouvements de la souris, et calculer les mêmes couleurs, je ne vois pas l’intérêt fonctionnel du bout de code ... du traitement graphique ... ou un simple exercice de style.
Message édité par willy le kid le 13-03-2014 à 10:40:40