Temps de lecture : 3 minutes
Une méthode (ou fonction) atomique, c’est une méthode qui ne pourra pas s’exécuter plusieurs fois en même temps, parallèlement. Si deux threads appellent la fonction en même temps, les deux exécutions seront effectuées les unes après les autres.
La librairie Funtom Java Utils
permet de rendre une méthode atomique en quelques lignes, à l’aide de la classe SynchronizedExecutor
Lorsque vous souhaitez rendre du code atomique, dans un service de votre application Spring par exemple, il vous suffit :
SynchronizedExecutor atomicExecutor = new SynchronizedExecutor();
atomicExecutor.execute(() -> { // some code to execute });
Vous développez une application pour commander des places de cinéma et vous vous attaquez à la fonction permettant de réserver une place. Vous avez besoin de rendre ce code atomique car sinon deux personnes pourraient réserver en même temps la dernière place de cinéma disponible.
PerKeySynchronizedExecutor
qui permet de bloquer les exécutions parallèles seulement si une exécution parallèle est effectuée avec la même « Clé ». Dans notre exemple, il serait très utile car ce serait préférable de bloquer l’exécution uniquement pour des réservations sur une même séance de cinéma. Le code: private final PerKeySynchronizedExecutor<Long> atomicExecutor = new PerKeySynchronizedExecutor<>();
. Ici, Long
c’est le type de la clé qu’on va donner. Lors de son utilisation: atomicExecutor.execute(movieShow.getId(), () -> { // some code });
où movieShow.getId()
est l’identifiant de la séance. Si une personne A réserve sur la séance d’id 1 et une personne B réserve sur la séance d’id 2, elles pourront le faire parallèlement.ReadWriteSynchronizedExecutor
qui permet de bloquer l’exécution parallèle en écriture mais pas en lecturePerKeyReadWriteSynchronizedExecutor
qui fait de même mais uniquement sur un clé spécifiéeDécouvrez le reste de nos articles sur notre blog !
Publié le 11/09/2020 dans Développement
Rédigé par :