ForkJoin

Exécution des tâches parallèles par la division

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Pour certains l'acronyme D&C peut signifierle jeu RPG, Dragon & Conquest. En programmation Java il prend une signification totalement différente. Il signifie divide and conquer algorithm.

Cet algorithme repose sur le principe qu'un grand problème peut être décomposé en plusieurs sous-problèmes plus petits du même type. En Java il est implementé par le framework fork/join. Regardons l'exemple de son implémentation dans le calcul de la somme des 20 premiers chiffres (0 inclus) :

afficher le code

Voici le résultat :

afficher le code

Tout d'abord, il faut noter la présence de l'instance de la classe ForkJoinPool qui évoque avec la méthode invoke() l'implémentation de l'algorithme divide and conquer (diviser et conquérir). Elle passe en paramètre l'instance de la classe DividerTask. Quant à elle, elle se charge de diviser le tableau des Integers à sommer. Les sous-tâches sont résumées aux instances de la classe SumTask. Elles sont ensuite rajoutées dans la List. Elles sont également admises à être appelées d'une manière asynchrone (méthode fork()). La dernière itération sur la liste tasks eeepermet de joindre (fonction join()) l'exécution de la sous-tâche à celle appartenant à la tâche principale. Au total, elle garantit la conformité du résultat.

Si la méthode join() était absente, les sous-tâches pourraient s'exécuter. Cependant, leurs résultats ne seraient pas rajoutés au résultat principal de la classe DividerTask. Ensuite, tout le code s'exécuterait d'une manière totalement désordonnée. Voici l'illustration de ce propos (fragment sum += task.join(); a été commenté) :

afficher le code

Bartosz KONIECZNY Concurrence

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil CSS

Comment centrer verticalement les inputs type radio et checkbox ?

L'alignement vertical des inputs radio et checkbox peut se faire avec la propriété CSS, vertical-align. Par exemple :

<input type="radio" name="typeUser" id="pro-1" style="vertical-align:top;"/><label for="pro-1">Professionnel</label>