Sobes.tech
Junior — Middle

Ako zabezpečiť, aby operácia bola vykonaná iba raz a zabránila jej opakovaniu?

sobes.tech AI

Odpoveď od AI

Aby ste zabezpečili, že operácia sa vykoná iba raz a zabránili jej opakovanému vykonaniu, môžete použiť niekoľko prístupov:

  1. Synchronizácia vlákien:

    • Použitie kľúčového slova synchronized alebo zámkov (Lock) na zabránenie súčasnému spusteniu operácie.
  2. Stavový príznak:

    • Zavedenie booleovského príznaku, ktorý sa nastaví pri prvom spustení operácie a pred jej vykonaním sa skontroluje.
  3. Použitie AtomicBoolean alebo premenných volatile:

    • Pre bezpečnú kontrolu stavu operácie v prostrediach s viacerými vláknami.
  4. Idiomatický vzor "singleton" alebo lenivá inicializácia:

    • Napríklad pomocou 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)) {
            // Kód operácie, ktorá má byť vykonaná iba raz
            System.out.println("Operácia vykonaná");
        } else {
            System.out.println("Operácia už bola vykonaná skôr");
        }
    }
}

Týmto spôsobom sa operácia vykoná iba raz, aj keď ju viaceré vlákna pokúsia spustiť súčasne.