Junior — Middle
Jak zapewnić, że operacja zostanie wykonana tylko raz i uniknąć jej powtórnego wykonania?
sobes.tech AI
Odpowiedź od AI
Aby zapewnić, że operacja zostanie wykonana tylko raz i wyeliminować jej powtórne wykonanie, można zastosować kilka podejść:
-
Synchronizacja wątków:
- Użycie słowa kluczowego
synchronizedlub blokad (Lock) w celu zapobiegania jednoczesnemu uruchomieniu operacji.
- Użycie słowa kluczowego
-
Flaga stanu:
- Wprowadzenie flagi boolean, która jest ustawiana przy pierwszym uruchomieniu operacji i sprawdzana przed jej wykonaniem.
-
Użycie
AtomicBooleanlub zmiennychvolatile:- Do bezpiecznej kontroli stanu operacji w środowiskach wielowątkowych.
-
Wzorzec "singleton" lub leniwa inicjalizacja:
- Na przykład, używając
java.util.concurrent.atomic.AtomicBoolean:
- Na przykład, używając
import java.util.concurrent.atomic.AtomicBoolean;
public class OneTimeOperation {
private final AtomicBoolean executed = new AtomicBoolean(false);
public void execute() {
if (executed.compareAndSet(false, true)) {
// Kod operacji, która ma być wykonana tylko raz
System.out.println("Operacja wykonana");
} else {
System.out.println("Operacja już została wykonana wcześniej");
}
}
}
W ten sposób operacja zostanie wykonana tylko raz, nawet jeśli kilka wątków spróbuje ją uruchomić jednocześnie.