Middle
¿Es una construcción segura para hilos perezosa?
sobes.tech AI
Respuesta de la IA
lazy en Kotlin por defecto no es seguro para hilos. La seguridad para hilos se logra mediante la especificación de un modo de inicialización especial.
Modos disponibles (enumeración LazyThreadSafetyMode):
SYNCHRONIZED: Por defecto. Se utiliza un bloqueo para garantizar que solo un hilo inicialice el valor en un momento dado. Todos los hilos ven el mismo valor inicializado.PUBLICATION: Varios hilos pueden ejecutar simultáneamente la lambda de inicialización. El primer hilo que inicializa con éxito gana. Los resultados de los demás se ignoran. Los hilos que esperan la inicialización obtendrán ya sea un valor ya inicializado o un valor inicializado por otro hilo.NONE: Sin garantías de seguridad para hilos. Modo más rápido. No utilice este modo si existe la posibilidad de acceder a la propiedad perezosa desde múltiples hilos simultáneamente.
Ejemplo de uso con especificación explícita del modo:
// Modo seguro para hilos SYNCHRONIZED (por defecto)
val safeLazyValue: String by lazy {
// Código de inicialización
"Cadena segura para hilos (SYNCHRONIZED)"
}
// Modo PUBLICATION - puede ser inicializado por varios hilos, pero el resultado será uno solo.
val publicationLazyValue: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
// Código de inicialización
"Cadena segura para hilos (PUBLICATION)"
}
// Modo no seguro para hilos. Rápido, pero peligroso en multihilo.
val unsafeLazyValue: String by lazy(LazyThreadSafetyMode.NONE) {
// Código de inicialización
"Cadena no segura para hilos (NONE)"
}