Sobes.tech
Middle

Lazy oqimi xavfsiz konstruktsiyami bormi?

sobes.tech AI

AIdan javob

lazy Kotlin'da od default thread-safe emas. Thread xavfsizligini ta'minlash uchun maxsus boshlash rejimi belgilanishi kerak.

Mavjud rejimlar (LazyThreadSafetyMode enumi):

  • SYNCHRONIZED: Standart. Bir vaqtning o'zida faqat bitta oqim qiymatni boshlash uchun blok ishlatiladi. Barcha oqimlar bir xil boshlang'ich qiymatni ko'radi.
  • PUBLICATION: Bir nechta oqim bir vaqtning o'zida boshlovchi lambda-ni bajarishi mumkin. Birinchi muvaffaqiyatli boshlovchi g'olib chiqadi. Boshqalar natijalari e'tiborga olinmaydi. Kutayotgan oqimlar yoki allaqachon boshlang'ich qiymatni oladi yoki boshqa oqim tomonidan boshlang'ich qiymat oladi.
  • NONE: Oqim xavfsizligi kafolati yo'q. Eng tez rejim. Agar bir nechta oqimdan bir vaqtning o'zida lazy xususiyatiga kirish ehtimoli bo'lsa, bu rejimdan foydalanmang.

Rejani aniq belgilash bilan foydalanish misoli:

// Thread xavfsiz SYNCHRONIZED rejim (standart)
val safeLazyValue: String by lazy {
    // Boshlash kodi
    "Thread xavfsiz satr (SYNCHRONIZED)"
}

// PUBLICATION rejimi - bir nechta oqim tomonidan boshlanishi mumkin, lekin natija bitta.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
    // Boshlash kodi
    "Thread xavfsiz satr (PUBLICATION)"
}

// Thread xavfsiz emas rejim. Tez, lekin xavfli.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
    // Boshlash kodi
    "Xavfsiz emas satr (NONE)"
}