2010-01-19 21 views
6

¿Cuál es la relación con la seguridad de hilos y objetos inmutables? ¿Hace más fácil compartir un único recurso entre múltiples hilos? Si los objetos inmutables son apátridas, ¿pueden agruparse en un contenedor como un contenedor J2EE?¿Qué son los objetos inmutables?

gracias

Respuesta

5

Los objetos Threadsafe son objetos que permiten el acceso simultáneo de varios hilos. Sus garantías de implementación (por ejemplo, mediante bloqueos/métodos sincronizados/...) no entrarán en un estado no válido. Además, no debe haber pérdida de datos.

Los objetos inmutables no se pueden modificar después de su creación. Entonces: Sí, son una especie de apátrida.

Como los objetos inmutables no se pueden cambiar, no hay necesidad de bloquearlos, el acceso a los objetos siempre es seguro para la lectura de los hilos (cuando no se modifican las variables). Por lo tanto, los objetos reales inmutables siempre son seguros para el hilo.

+1

Normalmente, los objetos sin estado no tienen estado. Los objetos inmutables no pueden pasar a un estado diferente del que se crearon, por lo que tienen exactamente un estado. –

4

objeto inmutable: Un objeto que no cambia su estado interno.

La relación con la seguridad de subprocesos: si un objeto no se puede mutar, es seguro usarlo en varios subprocesos, es decir, no es necesario tener bloqueos o elementos similares para garantizar consistencia entre subprocesos.

10

Los objetos inmutables son objetos que no se pueden cambiar. Si no se puede cambiar un objeto, no hay preocupación de que un hilo competidor cambie el estado del objeto "detrás de la parte posterior" del hilo de ejecución, y por lo tanto los objetos inmutables no necesitan protección mediante sincronización o alguna otra técnica.

+1

también si el objeto es sin estado no tiene sentido hablar de inmutabilidad, porque no hay estado para mutar. Entonces, es seguro agrupar los objetos en un contenedor. – Mauricio

+0

Una cosa a tener en cuenta es que si intentas cambiar un objeto inmutable (por ejemplo, una cadena) reasignando una variable que apunta a ese objeto, entonces otros hilos no verán ese cambio. Por lo tanto, los "cambios" en un objeto inmutable no se pueden compartir entre subprocesos. – Aaron

+0

Si intenta 'cambiar' cualquier objeto reasignando una variable que hace referencia a ese objeto, entonces no sabe lo que está haciendo. –

Cuestiones relacionadas