Sobes.tech
Middle

Արդյոք դա լյազի հոսքի անվտանգ կառուցվածք է?

sobes.tech AI

Պատասխան AI-ից

lazy Kotlin-ում ըստ նախնական կարգավորումների անվտանգ չէ հոսքերի համար: Հոսքերի անվտանգությունը հասնում է հատուկ սկզբնական կարգավորման նշումով:

Առկա ռեժիմները (համարած LazyThreadSafetyMode ցուցակը):

  • SYNCHRONIZED: Դեպի նախնական կարգավորումը: Օգտագործվում է լոկակ՝ ապահովելու համար, որ միայն մեկ հոսք է սկզբնականացնում արժեքը տվյալ պահին: Բոլոր հոսքերը տեսնում են նույն սկզբնականացված արժեքը:
  • PUBLICATION: Միաժամանակ մի քանի հոսք կարող է իրականացնել սկզբնականացման lambda-ն: Առաջին հոսքը, որը հաջողությամբ սկզբնականացնում է, հաղթում է: Մնացած արդյունքները անտեսվում են: Հոսքերը, որոնք սպասում են սկզբնականացմանը, կստանան կամ արդեն սկզբնականացված արժեքը, կամ այն արժեքը, որը սկզբնականացրել է այլ հոսք:
  • 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)"
}