Middle
Ar tai yra saugi lazy srauto konstrukcija?
sobes.tech AI
Atsakymas iš AI
lazy Kotlin'e pagal numatytuosius nustatymus nėra srauto saugus. Srauto saugumas pasiekiamas nurodant specialų inicializacijos režimą.
Galimi režimai (sąraše LazyThreadSafetyMode):
SYNCHRONIZED: Numatyta. Naudojamas užraktas, kad užtikrintų, jog tik viena srautas inicializuoja reikšmę vienu metu. Visos srautai mato tą pačią inicializuotą reikšmę.PUBLICATION: Keletas srautų gali vienu metu vykdyti inicializatoriaus lambda. Pirmas srautas, kuris sėkmingai inicializuoja, laimi. Kiti rezultatai ignoruojami. Laukiantys srautai gaus arba jau inicializuotą reikšmę, arba reikšmę, inicializuotą kitu srautu.NONE: Jokių garantijų dėl srauto saugumo. Greičiausias režimas. Nenaudokite šio režimo, jei yra galimybė, kad keli srautai vienu metu prieis prie lazy savybės.
Pavyzdys su aiškiu režimo nurodymu:
// Srauto saugus režimas SYNCHRONIZED (numatytasis)
val safeLazyValue: String by lazy {
// Inicializacijos kodas
"Srauto saugus eilutė (SYNCHRONIZED)"
}
// PUBLICATION režimas - gali būti inicializuotas kelių srautų, bet rezultatas bus vienas.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// Inicializacijos kodas
"Srauto saugus eilutė (PUBLICATION)"
}
// Nėra srauto saugumo režimo. Greitas, bet pavojingas daugiasrautinėje aplinkoje.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// Inicializacijos kodas
"Nesaugus srauto eilutė (NONE)"
}