Aller au contenu

Java — synchronized (Gestion de la concurrence)

Le mot-clé synchronized permet de contrôler l’accès concurrent à une ressource afin d’éviter les conflits entre threads.


1. Idée simple

synchronized :

➡️ bloque l’accès concurrent ➡️ garantit qu’un seul thread exécute le code à la fois


2. Méthode synchronisée (instance)

class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }
}

ici :

  • lock sur l’objet courant (this)
  • un seul thread par instance

3. Bloc synchronisé

synchronized(this) {
    count++;
}

permet de synchroniser uniquement une partie du code


4. Méthode static synchronized

class Counter {
    private static int count = 0;

    public static synchronized void increment() {
        count++;
    }
}

ici :

  • lock sur la classe (Counter.class)
  • partagé entre toutes les instances

5. Résumé des locks

Type Lock utilisé
méthode instance objet (this)
bloc synchronized(this) objet (this)
méthode static classe

6. Pourquoi utiliser synchronized ?

  • éviter les race conditions
  • garantir cohérence des données
  • sécuriser les accès concurrents

7. Pièges fréquents

  • lock trop large → performance
  • oublier le lock → bugs
  • deadlock possible

8. Limites

  • blocage (threads attendent)
  • pas toujours performant
  • peut créer contention

9. Questions classiques

Q1

synchronized fait quoi ? bloque accès concurrent


Q2

lock instance = ? objet (this)


Q3

lock static = ? classe


Q4

danger principal ? deadlock


10. À retenir

  • synchronized = exclusivité
  • instance → lock objet
  • static → lock classe
  • attention aux performances

🧾 En résumé

  • protège les données partagées
  • évite les conflits entre threads
  • peut ralentir si mal utilisé

C’est un outil puissant mais à utiliser avec précaution en concurrence.


Voir aussi