Diseñando hilos seguros

De ChuWiki
Objetos 'thread-safe'
  • 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