14
Sincronizaci ón de Hilos Presentado por: Julian David Grijalba Bernal Presentado a: Jairo Alberto Botero Fagua UPTC-Tunja 2015

Sincronización de Hilos

Embed Size (px)

DESCRIPTION

Hilos Sincronizados en java

Citation preview

Presentacin de PowerPoint

Sincronizacin de HilosPresentado por:Julian David Grijalba Bernal

Presentado a: Jairo Alberto Botero Fagua

UPTC-Tunja2015Muchas veces los hilos debern trabajar de forma coordinada, por lo que es necesario un mecanismo de sincronizacin entre ellos.

Existen muchas situaciones interesantes donde ejecutar threads que compartan datos y deban considerar el estado y actividad de otros threads. Este conjunto de situaciones de programacin son conocidos como escenarios 'productor/consumidor'; donde el productor genera un canal de datos que es consumido por el consumidor.

Condicin de carreraUna condicin de carrera ocurre cuando varios threads, que se ejecutan sin sincronizar, acceden al mismo objeto (llamado recurso compartido) retornando resultados inesperados (error)Una aplicacin Java donde un Thread (el productor) escribe datos en un fichero mientras que un segundo Thread (el consumidor) lee los datos del mismo fichero.

*Comparten recursos en comn.La palabra reservadasynchronizedIndica que ciertas partes del cdigo, estn sincronizadas, es decir, que solamente un subproceso puede acceder a dicho mtodo a la vez.

MonitorLos objetos que son compartidos entre dos threads y cuyo acceso debe ser sincronizado son llamados condiciones variables. El lenguaje Java permite sincronizar threads alrededor de una condicin variable mediante el uso de monitores. Los monitores previenen que dos threads accedan simultneamente a la misma variable.

Para facilitar la comunicacin entre threads se usan los mtodos wait(), notify(), y notifyAll() de la clase Object. Estos mtodos deben ser invocados en un mtodo o bloque sincronizado del objeto invocante de los mtodosEl mtodo wait() provoca que el thread espere hasta que ocurra alguna condicin, en cuyo caso se usan los mtodos notify() o notifyAll() para notificar a los threads en espera para continuar con la ejecucinEl mtodo wait() provoca que un thread libere el bloqueo que mantiene sobre un objeto, permitiendo que otro thread se eje.cutewait() slo se puede invocar desde el interior de un cdigo sincronizado y siempre debe estar en un bloque try porque genera IOExceptions.Despus, el thread pasa a estar disponible otra vez y compite por el bloqueo del objeto y si lo consigue contina como si no hubiera ocurrido la suspensinCada llamada anotify()despierta al primer hilo en la lista de espera, pero no al resto, que siguen dormidos. Necesitamos por tanto hacer tantosnotify()como hilos hayan hechowait()para ir despertndolos a todos de uno en uno.