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:
-
Synchronizácia vlákien:
- Použitie kľúčového slova
synchronizedalebo zámkov (Lock) na zabránenie súčasnému spusteniu operácie.
- Použitie kľúčového slova
-
Stavový príznak:
- Zavedenie booleovského príznaku, ktorý sa nastaví pri prvom spustení operácie a pred jej vykonaním sa skontroluje.
-
Použitie
AtomicBooleanalebo premennýchvolatile:- Pre bezpečnú kontrolu stavu operácie v prostrediach s viacerými vláknami.
-
Idiomatický vzor "singleton" alebo lenivá inicializácia:
- Napríklad pomocou
java.util.concurrent.atomic.AtomicBoolean:
- Napríklad pomocou
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.