¿Cuáles son las garantías de seguridad de subprocesos para ImmutableList.Builder de Guava? Los javadocs no dicen.¿Es seguro el hilo ImmutableList.Builder de Guava?
Respuesta
Mientras que las clases de Guava Inmutable son enhebrables, sus constructores no lo son. Para la mayoría de las aplicaciones, solo un hilo interactuará con cualquier instancia particular del generador.
Si bien la ausencia de seguridad de subprocesos generalmente no necesita documentarse, tal Javadoc podría tener sentido para los compiladores de compilación inmutables. La gente puede sorprenderse de que ImmutableList sea seguro mientras ImmutableList.Builder no lo es.
Si la seguridad de la rosca no se menciona en los javadocs, ¡no lo asuma!
Más en serio, "no".
Yo también preferiría los javadocs de ImmutableList y los amigos incluyen una observación tan obvia, sí (por lo que no tendrías que asumirla tú mismo), porque lo "obvio" no siempre es el caso. El otro día estaba discutiendo scala.List
, una lista inmutable y algunos problemas sorprendentes que puede causar si se intercambian entre subprocesos de manera inapropiada (a través de una carrera de datos), en la que las personas no pensaban porque ven la palabra "inmutable" en la lata Además, equiparan "inmutable == thread-safe", por lo que vale la pena estar a salvo, incluso cuando se documentan aspectos "obvios" de seguridad de hilos.
De acuerdo con @Dimitris Andreou: definitivamente no asume la seguridad del hilo si no está documentado como tal. Cuando se hace el esfuerzo de hacer una clase no trivial segura para el hilo, usted quiere que los usuarios lo conozcan.
Más allá de eso, creo que el caso de uso más común para un generador estará limitado por hilos: es decir, como una variable local en algún método. Si necesita varios hilos para construir una lista, ¿es realmente inmutable?
Si tiene varios hilos que se alimentan en una lista, pero desea realizar una instantánea en algún momento y decir "no más cambios en el futuro, es inmutable", escribiría algo que tome los elementos de esos hilos y congele el contenido en una nueva ImmutableList cuando sabe que está listo.
- 1. guava-libraries: ¿es Iterators.cycle() seguro para subprocesos?
- 2. ¿Es seguro el hilo cerrado?
- 3. ¿Es seguro el hilo unique_ptr?
- 4. guava-libraries - ¿Es seguro el hilo de la clase de pedido?
- 5. ¿Es seguro el hilo de Hunspell?
- 6. es + = en el hilo de python seguro?
- 7. ¿Es seguro el hilo de ACAccount?
- 8. ¿Es seguro un hilo de tabla Guava cuando sus mapas de respaldo son seguros para subprocesos?
- 9. ¿Es seguro reinsertar la entrada de Guava RemovalListener?
- 10. ¿Es seguro utilizar este hilo de Parallel.ForEach()?
- 11. ¿Es seguro el hilo de middleware de Django?
- 12. ¿Es seguro el hilo de método onStartCommand (..) de IntentService?
- 13. ¿Es seguro este hilo html helper?
- 14. ¿El hilo de la función gettimeofday es seguro en Linux?
- 15. ¿Es seguro guardar en el hilo de Python?
- 16. ¿Es seguro el hilo del operador de fusión nulo?
- 17. ¿Es seguro el hilo del constructor estático de C#?
- 18. ¿Es seguro el hilo de la clase Joda-Time DateTimeFormatter?
- 19. ¿El C# '??' hilo de operador seguro?
- 20. ¿Es seguro el hilo std :: vector o boost :: vector?
- 21. ¿Es seguro el hilo fprintf en OS X?
- 22. Guava ImmutableList copyOf vs Builder
- 23. ¿Es seguro pasar el evento del hilo principal al hilo de trabajo y esperarlo?
- 24. ¿Es seguro este hilo de código de cifrado de Java?
- 25. ¿Es seguro un hilo de sesión de Django?
- 26. Python 2.7: Imprimir hilo seguro
- 27. ¿Es seguro usar SHFileOperation en un hilo de trabajo?
- 28. ¿Es seguro este hilo del código de Core Graphics?
- 29. Es la base de datos Sqlite hilo seguro
- 30. hilo mapa seguro para java
¿Tiene alguna prueba? El artículo "Colecciones inmutables" (https://github.com/google/guava/wiki/ImmutableCollectionsExplained) dice "Los objetos inmutables pueden ser utilizados por muchos hilos" pero no dice explícitamente "Guava Immutable Collection is thread-safe" . Sigo sin estar convencido :-( – 30thh