Middle
Ist es eine lazy-Thread-sichere Konstruktion?
sobes.tech KI
Antwort von AI
lazy in Kotlin ist standardmäßig nicht thread-sicher. Die Thread-Sicherheit wird durch Angabe eines speziellen Initialisierungsmodus erreicht.
Verfügbare Modi (Aufzählung LazyThreadSafetyMode):
SYNCHRONIZED: Standard. Es wird eine Sperre verwendet, um sicherzustellen, dass nur ein Thread den Wert zu einem Zeitpunkt initialisiert. Alle Threads sehen denselben initialisierten Wert.PUBLICATION: Mehrere Threads können gleichzeitig die Initialisierungs-Lambda ausführen. Der erste Thread, der erfolgreich initialisiert, gewinnt. Die Ergebnisse der anderen werden ignoriert. Wartende Threads erhalten entweder einen bereits initialisierten Wert oder einen von einem anderen Thread initialisierten Wert.NONE: Keine Garantien für Thread-Sicherheit. Schnellster Modus. Verwenden Sie diesen Modus nicht, wenn die Möglichkeit besteht, dass mehrere Threads gleichzeitig auf die Lazy-Eigenschaft zugreifen.
Beispiel mit expliziter Angabe des Modus:
// Thread-sicherer Modus SYNCHRONIZED (Standard)
val safeLazyValue: String by lazy {
// Initialisierungscode
"Thread-sichere Zeichenkette (SYNCHRONIZED)"
}
// Modus PUBLICATION - kann von mehreren Threads initialisiert werden, aber das Ergebnis ist eins.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// Initialisierungscode
"Thread-sichere Zeichenkette (PUBLICATION)"
}
// Nicht thread-sicherer Modus. Schnell, aber riskant bei Multithreading.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// Initialisierungscode
"Nicht thread-sichere Zeichenkette (NONE)"
}