Middle
Lazy akış çoklu iş parçacığı güvenli mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de lazy varsayılan olarak thread-safe değildir. Thread güvenliği, özel bir başlatma modu belirtilerek sağlanır.
Mevcut modlar (enumerasyon LazyThreadSafetyMode):
SYNCHRONIZED: Varsayılan. Bir kilit kullanılır ve sadece bir thread'in aynı anda değeri başlatmasını sağlar. Tüm threadler aynı başlatılmış değeri görür.PUBLICATION: Birden fazla thread aynı anda başlatıcı lambda'yı çalıştırabilir. Başarıyla ilk başlatan kazanır. Diğer sonuçlar göz ardı edilir. Bekleyen threadler ya zaten başlatılmış değeri ya da başka bir thread tarafından başlatılmış değeri alır.NONE: Thread güvenliği garantisi yoktur. En hızlı moddur. Çoklu thread erişimi olasılığı varsa bu modu kullanmayın.
Modu açıkça belirten kullanım örneği:
// Thread güvenliği sağlanan SYNCHRONIZED modu (varsayılan)
val safeLazyValue: String by lazy {
// Başlatma kodu
"Thread güvenli dize (SYNCHRONIZED)"
}
// PUBLICATION modu - birkaç thread tarafından başlatılabilir, ama sonuç tek olur.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// Başlatma kodu
"Thread güvenli dize (PUBLICATION)"
}
// Thread güvenliği olmayan, hızlı ama tehlikeli mod.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// Başlatma kodu
"Thread güvenliği olmayan dize (NONE)"
}