Sobes.tech
Middle

Lazy axını çoxlu iş parçacığına qarşı təhlükəsiz bir quruluşdurmu?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də lazy varsayılan olaraq çox iplikli təhlükəsiz deyil. İplik təhlükəsizliyi xüsusi başlanğıc rejimi göstərməklə təmin edilir.

Mövcud rejimlər (LazyThreadSafetyMode siyahısı):

  • SYNCHRONIZED: Standart. Yalnız bir iplik bir zamanda dəyəri başlatmaq üçün kilid istifadə edir. Bütün ipliklər eyni başlatılmış dəyəri görür.
  • PUBLICATION: Bir neçə iplik eyni zamanda başlatıcı lambda-ı icra edə bilər. Uğurla ilk başlatan qalib gəlir. Digər nəticələr nəzərə alınmır. Gözləyən ipliklər ya artıq başlatılmış dəyəri, ya da başqa iplik tərəfindən başlatılmış dəyəri alacaq.
  • NONE: İplik təhlükəsizliyi zəmanəti yoxdur. Ən sürətli rejim. Əgər çox iplikli giriş ehtimalı varsa, bu rejimi istifadə etməyin.

Rejimə açıq şəkildə göstəriş ilə istifadə nümunəsi:

// İplik təhlükəsiz rejim SYNCHRONIZED (standart)
val safeLazyValue: String by lazy {
    // Başlatma kodu
    "İplik təhlükəsiz sətir (SYNCHRONIZED)"
}

// PUBLICATION rejimi - bir neçə iplik tərəfindən başlatıla bilər, amma nəticə tək olacaq.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
    // Başlatma kodu
    "İplik təhlükəsiz sətir (PUBLICATION)"
}

// İplik təhlükəsiz olmayan rejim. Sürətli, amma təhlükəli.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
    // Başlatma kodu
    "İplik təhlükəsiz olmayan sətir (NONE)"
}