Threads (Hilos)

  1. Un ejemplo Simple:  SimpleThread
  2. Creación de múltiples hilos: Counter4
  3. Uso de la interfaz Runnable : ColorBoxes

  1. Problemas en la compartición de recursos mientras se ejecutan hilos: Sharing1
    Aqui se presenta una aplicación donde dos hilos comparten datos y se producen problemas de sinconización.
  2. Uso de acceso exclusivo a recursos (synchronized métodos o sentencias): Sharing2
    Cuando un método que está sincronizado (synchronized método) es llamado, el objeto impide o bloquea futuros accesos a métodos sincronizados definidos dentro de él. Sólo un método sincronizado por objeto puede estar siendo ejecutado.
    Uno de los problemas de esta opción que la granularidad dada a la sincronización es muy gruesa. Es decir, no se puede controlar  la o las inscrucciones que representan la zona critica. Todo el método se transforma en zana crítica.
  3. Mejor eficiencia se obtiene definiendo una zona crítica (sentencia sincronizada): Sharing2
    En este caso usamos un objeto como base para la sincronización. Se agrupa el código a definir como zona crítica y se le asocia a un objeto (puede ser el mismo -this- u otro).

  1. Interrupción de un hilo bloqueado: Interrupt
  2. Notificación a un hilo bloqueado: Suspend
  3. wait() and notify():

  4. Cuando una thread llama a wait, ocurreo lo siguente:
    1.     La thread actual es bloqueada
    2.     El candado (lock) del objeto de exclusión mutua es liberado
    3.     La thread es puesta en una cola a la espera para ser despertada por otra thread con una llamado a notify() sobre el mismo objeto.

  1. Cambio de prioridades de hilos: Counter5