Diseñando hilos seguros
- Los threads de una aplicación tienen
- mismo Heap
- variables de instancia
- variables de clase...
- distinto Stack
- variables locales
- parametros de método
- parametros de retorno...
- Opciones para hacer thread-safe una aplicación:
- Sincronizar las secciones críticas
- Uso de la palabra reservada synchronized (se reduce el rendimiento)
- Sólo se sincroniza la concurrencia en escritura/lectura o escritura/escritura
- Hacer los objetos inmutables
- En un objeto sólo se puede dar valores a sus atributos en el instante de crearlo (después es inmutable)
- Se crean objetos nuevos cada vez que se necesite realizar alguna modificación
- Se usa con objetos pequeños o tipos fundamentales
- La API de Java lo usa en clases como String, Integer...
- Usar un wrapper ('envoltorio')
- Se aplica el patrón decorador para crear un envoltorio 'sincronizado'de un objeto no sincronizado
- Se usa cuando no se quiere modificar un objeto ya existente
- La API de Java lo usa en algunas clases que implementan Collection