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)"
}