Junior — Middle
Hogyan biztosítható, hogy egy művelet csak egyszer hajtódjon végre, és elkerüljük a többszöri végrehajtását?
sobes.tech MI
Válasz az MI-től
Annak biztosítására, hogy egy művelet csak egyszer hajtódjon végre, és elkerüljük annak ismételt végrehajtását, több megközelítés is alkalmazható:
-
Szálak szinkronizálása:
- A
synchronizedkulcsszó vagy zárolások (Lock) használata a művelet egyidejű indításának megakadályozására.
- A
-
Állapotjelző:
- Egy booleán jelző bevezetése, amely az első futáskor beállításra kerül, és ellenőrizni kell, mielőtt végrehajtanánk.
-
AtomicBooleanvagyvolatileváltozók használata:- A művelet állapotának szálbiztos ellenőrzése érdekében.
-
"Singleton" mintázat vagy késleltetett inicializáció:
- Például az
java.util.concurrent.atomic.AtomicBooleansegítségével:
- Például az
import java.util.concurrent.atomic.AtomicBoolean;
public class OneTimeOperation {
private final AtomicBoolean executed = new AtomicBoolean(false);
public void execute() {
if (executed.compareAndSet(false, true)) {
// A művelet kódja, amely csak egyszer hajtódik végre
System.out.println("Művelet végrehajtva");
} else {
System.out.println("A művelet már korábban végrehajtásra került");
}
}
}
Így a művelet csak egyszer fog végrehajtódni, még akkor is, ha több szál próbálja egyszerre elindítani.