You are on page 1of 10

Sincronizacin de hilos

Para que dos hilos no accedan a la vez a la misma zona de datos se utilizan los mtodos synchronized. Cuando en una clase hay varios mtodos synchronized se asegura que no van a ejecutarse simultneamente (por varios hilos) ms de uno de ellos La declaracin de estos mtodos se realiza colocando la palabra syncrhonized antes del tipo de dato devuelto por el mtodo.

SINCRONIZACIN DE HILOS

La programacin concurrente puede dar lugar a muchos errores debido a la utilizacin de recursos compartidos que pueden ser alterados. Un monitor impide que varios hilos accedan al mismo recurso compartido a la vez . En Java los monitores se consiguen mediante el uso de la palabra reservada synchronized como

Como modificador de acceso de mtodos, este segundo caso se declarara como sigue: public synchronized void mtodo(). Este mtodo declarado de tal forma garantiza que solo un hilo de esta clase puede acceder a este mtodo a la vez. De tal forma que si un hilo de la misma clase intenta llamar a este mtodo mientras otro hilo esta dentro de l, el hilo que realiza la

Es muy costoso en tiempo de ejecucin dado que los dems hilos se detendrn hasta que el monitor sea liberado. Y tambin es costoso en tiempo de computacin ya que como media se ha determinado que un mtodo sincronizado se ejecuta 6 veces ms lento que uno que no este sincronizado. Por tanto es recomendable

A este fin responde el delimitador de bloque synchronized, cuyo uso es el siguiente: synchronized(objeto) { ... } Durante este bloque el objeto estar sincronizado.

SINCRONIZACION DE HILOS

del manejo de tareas mltiples se necesita la comunicacin entre ellas y mediante 3 mtodos obtenemos la informacin necesaria para Mtodo intercomunicacin, Accin estos mtodos son: wait() Libera el monitor y pasa al
estado "esperando". notify() Enva una seal al thread que hizo la llamada wait(), el thread en cuestin continua con su ejecucin pasando a estado "preparado". si hay varios threads esperando sobre el objeto este mtodo notifica a todos.

Dentro

notifyAll()

Mtodos de sincronizacin

El mtodo wait() permite a un thread esperar hasta que otro cumpla una determinada condicin, cuando esto sucede, el segundo ejecutar el mtodo notify() para informar al primero de que algo ha ocurrido y que dicha condicin puede haber sido satisfecha. El mtodo nofify() despierta a uno solo de los threads que estn esperando en un wait() del mismo objeto, mientras que notifyAll() despierta a todos los threads que estn esperando en dicho objeto. La instruccin wait realiza las operaciones de parar el thread y liberar el bloqueo atmicamente

wait
El esquema recomendado para el uso del wait es: synchronized void hacerMientrasCondicion () { while (!condicion) wait(); Instrucciones a realizar cuando la condicin sea satisfecha } Se coloca dentro de un mtodo sincronizado para evitar que la condicin pueda ser cambiada por otro thread una vez satisfecha

El metodo notify permite indicar el tiempo mximo de espera void wait ([long millis, ] [int nanos]) De igual forma el esquema recomendado para el uso de notify es: synchronized void cambiarCondicion () { cambiar la condicin notifyAll(); } Se usa notifyAll en lugar de notify cuando puede haber threads esperando por otras condiciones y con un notify slo se despierta uno, que puede ser el que

You might also like