Middle
Biztosítja-e a lazy áram a szálbiztonságot?
sobes.tech MI
Válasz az MI-től
A Kotlinban a lazy alapértelmezés szerint nem szálbiztos. A szálbiztonságot egy speciális inicializálási mód megadásával érhetjük el.
Elérhető módok (a LazyThreadSafetyMode felsorolás):
SYNCHRONIZED: Alapértelmezett. Egy zárral biztosítja, hogy csak egy szál inicializálja az értéket egy adott pillanatban. Minden szál ugyanazt az inicializált értéket látja.PUBLICATION: Több szál egyidejűleg futtathatja az inicializáló lambda-t. Az első sikeresen inicializáló szál nyer. A többi eredményei figyelmen kívül maradnak. A várakozó szálak vagy már inicializált értéket kapnak, vagy egy másik szál által inicializált értéket.NONE: Nincs garancia a szálbiztonságra. A leggyorsabb mód. Ne használd ezt a módot, ha több szálból való hozzáférés valószínűsíthető.
Példa a mód explicit megadásával:
// Szálbiztos mód SYNCHRONIZED (alapértelmezett)
val safeLazyValue: String by lazy {
// Inicializáló kód
"Szálbiztos szöveg (SYNCHRONIZED)"
}
// PUBLICATION mód - több szál is inicializálhatja, de az eredmény egy lesz.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// Inicializáló kód
"Szálbiztos szöveg (PUBLICATION)"
}
// Nem szálbiztos mód. Gyors, de veszélyes több szálas környezetben.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// Inicializáló kód
"Nem szálbiztos szöveg (NONE)"
}