Middle
არის თუ არა ეს ლაზის ნაკადი უსაფრთხო კონსტრუქცია?
sobes.tech AI
პასუხი AI-სგან
lazy Kotlin-ში საწყისად არ არის თრედ-ფრენდლი. თრედ უსაფრთხოება მიღწეულია სპეციალური ინიცირების რეჟიმის მითითებით.
ხელმისაწვდომი რეჟიმები (სათვალთვალო LazyThreadSafetyMode):
SYNCHRONIZED: სტანდარტული. გამოიყენება ლოკი, რათა უზრუნველყოს, რომ მხოლოდ ერთი თრედი ინიცირებს მნიშვნელობას ერთ დროს. ყველა თრედი ხედავს ერთსა და იმავე ინიცირებულ მნიშვნელობას.PUBLICATION: რამდენიმე თრედი ერთდროულად შეუძლია ინიცირება ლამბდა. პირველი თრედი, რომელიც წარმატებით ინიცირებს, მოგებას იღებს. სხვა შედეგები იგნორირებულია. მოლოდინში მყოფი თრედები მიიღებენ ან უკვე ინიცირებულ მნიშვნელობას, ან სხვა თრედის მიერ ინიცირებულ მნიშვნელობას.NONE: არანაირი გარანტია თრედ-ფრენდლობის შესახებ. ყველაზე სწრაფი რეჟიმი. არ გამოიყენოთ ეს რეჟიმი, თუ არსებობს ალბათობა, რომ ერთდროულად რამდენიმე თრედი წვდომას ახდენს lazy თვისებაზე.
მაგალითი რეჟიმის ზუსტად მითითებით:
// თრედ-ფრენდლი SYNCHRONIZED რეჟიმი (სტანდარტული)
val safeLazyValue: String by lazy {
// ინიცირების კოდი
"თრედ-ფრენდლი სტრინგი (SYNCHRONIZED)"
}
// PUBLICATION რეჟიმი - შეიძლება ინიცირება რამდენიმე თრედის მიერ, მაგრამ შედეგი ერთია.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// ინიცირების კოდი
"თრედ-ფრენდლი სტრინგი (PUBLICATION)"
}
// არათრედ-ფრენდლი რეჟიმი. სწრაფი, მაგრამ საშიში მრავალთრედულ გარემოში.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// ინიცირების კოდი
"არათრედ-ფრენდლი სტრინგი (NONE)"
}