Sobes.tech
Junior — Middle

Comment garantir qu'une opération ne soit effectuée qu'une seule fois et éviter sa répétition?

sobes.tech IA

Réponse de l'IA

Pour garantir qu'une opération ne s'exécute qu'une seule fois et éviter sa réexécution, plusieurs approches peuvent être utilisées :

  1. Synchronisation des threads :

    • Utiliser le mot-clé synchronized ou des verrouillages (Lock) pour empêcher le lancement simultané de l'opération.
  2. Drapeau d'état :

    • Introduire un drapeau booléen qui est défini lors de la première exécution de l'opération, et le vérifier avant de l'exécuter.
  3. Utilisation de AtomicBoolean ou de variables volatile :

    • Pour un contrôle thread-safe de l'état de l'opération.
  4. L'idiome du "singleton" ou de l'initialisation paresseuse :

    • Par exemple, en utilisant java.util.concurrent.atomic.AtomicBoolean :
import java.util.concurrent.atomic.AtomicBoolean;

public class OneTimeOperation {
    private final AtomicBoolean executed = new AtomicBoolean(false);

    public void execute() {
        if (executed.compareAndSet(false, true)) {
            // Code de l'opération qui doit s'exécuter une seule fois
            System.out.println("Opération effectuée");
        } else {
            System.out.println("L'opération a déjà été effectuée auparavant");
        }
    }
}

Ainsi, l'opération ne sera exécutée qu'une seule fois, même si plusieurs threads tentent de la lancer simultanément.