[Aller au contenu](#main-content)

PREVIEW

[](/fr "Page d'accueil BearStudio")

[Prestations](/fr/prestations)[Équipe](/fr/equipe)[Blog](/fr/blog)

[Nous contacter](/fr/contact)Français

<!--astro:end-->

[Accueil](/fr)[Prestations](/fr/prestations)[Équipe](/fr/equipe)[Blog](/fr/blog)

<!--astro:end-->

<!-- Mobile Top Actions -->

Français

<!--astro:end-->

[Nous contacter](/fr/contact)

<!-- Content -->

[](/fr)

1. [Accueil](/fr)
2.
3. [Blog](/fr/blog)
4.
5. Brève 1 : Rendre une méthode atomique en Java en 2 minutes

# Brève 1 : Rendre une méthode atomique en Java en 2 minutes

Le 11 sept. 2020

par Quentin Lerebours

<!-- Background (translate3d is for safari to apply mix-blend-overlay) -->

![](/_astro/breve-1.J6HfVSN-_1AecqS.webp)

*Temps de lecture : 3 minutes*

## Qu’est-ce qu’une méthode atomique ?

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.

## Comment rendre une méthode atomique très simplement avec Java ?

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](/fr/blog/articles/versionner-entite-jpa) par exemple, il vous suffit :

* D’instancier un executeur synchrone (SynchronizedExecutor) en attribut de classe: `SynchronizedExecutor atomicExecutor = new SynchronizedExecutor();`
* Utiliser cet executor dans une méthode pour rendre du code atomique: `atomicExecutor.execute(() -> { // some code to execute });`

### **Un exemple concret :**

Vous [développez une application](/fr/prestations/developpement-web) 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.

![Exemple de code d\&#x27;une fonction Java atomique](/_astro/atomic_method-2-1024x600.CIJeqzsp_Z2fhwco.webp)

### Pour aller plus loin : La librairie propose aussi d’autres synchroniseurs

* `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 lecture
* `PerKeyReadWriteSynchronizedExecutor` qui fait de même mais uniquement sur un clé spécifiée

Publié le 11 sept. 2020

par Quentin Lerebours

[](/fr)

1900 Route de Cailly\
76690 Saint-André-sur-Cailly\
Normandie, FRANCE

[Accueil ](/fr)[Prestations ](/fr/prestations)[UX/UI Design ](/fr/prestations/ux-design)[Développement Web ](/fr/prestations/developpement-web)[Développement Mobile ](/fr/prestations/developpement-mobile)[Boost Projet ](/fr/prestations/boost-projet)[Accompagnement CTO ](/fr/prestations/accompagnement-cto)[Intelligence Artificielle ](/fr/prestations/intelligence-artificielle)[Équipe ](/fr/equipe)[Blog ](/fr/blog)[Candidater ](/fr/contact/processus-candidature-bearstudio)[Branding ](/fr/branding)[Mentions légales](/fr/mentions-legales)

Suivez nous sur...

[ Linkedin ](https://www.linkedin.com/company/bearstudio/ "Linkedin")[ X (twitter) ](https://twitter.com/_BearStudio "X (twitter)")[ Facebook ](https://www.facebook.com/allyouneedisbear "Facebook")[ YouTube ](https://www.youtube.com/channel/UC-2hpnhKgU2C_OFucjEN0IA "YouTube")[ Instagram ](https://www.instagram.com/_bearstudio/ "Instagram")[ GitHub ](https://github.com/BearStudio "GitHub")[ Twitch](https://www.twitch.tv/bearstudiolive "Twitch")

Le BearStudio est supporté par la

![Region Normandie](/_astro/logo-region.BxVRy695_Z1lruBA.svg)

Créé en 2016, le BearStudio est un studio d'accompagnement de projets en R\&D : développement sur-mesure Web et mobile, études de faisabilité et audit technologique, rien ne nous effraie !

© Tous droits réservés
