Threads (Hilos)
-
Un ejemplo Simple: SimpleThread
-
Creación de múltiples hilos: Counter4
-
Uso de la interfaz Runnable : ColorBoxes
-
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.
-
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.
-
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).
-
Interrupción de un hilo bloqueado: Interrupt
-
Notificación a un hilo bloqueado: Suspend
-
wait() and notify():
Cuando una thread llama a wait, ocurreo lo siguente:
-
La thread actual es bloqueada
-
El candado (lock) del objeto de exclusión
mutua es liberado
-
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.
-
Cambio de prioridades de hilos: Counter5