sábado, 19 de abril de 2014

SINCRONIZACIÓN - III

Los métodos notifyf) y notifyAllf) deben ser llamados desde el thread que tiene bloqueado el objeto para activar el resto de threads que están esperando la liberación de un objeto. Un thread se convierte en propietario del bloqueo de un objeto ejecutando un método sincronizado del objeto. Los bloqueos de tipo clase, se consiguen ejecutando un método de clase sincronizado (synchronized static). Véanse las dos funciones siguientes, de las que putf) inserta un dato y getf) lo recoge:

public synchronized int get() {
while (available == false) {
try {
// Espera a que put() asigne el valor y lo comunique con notifyf)
wait();
} catch (InterruptedException e) { }
}
available = false;
// notifica que el valor ha sido leido
notifyAll();
// devuelve el valor
return contents;
}
public synchronized void put(int valué) {
while (available == true) {
try {
// Espera a que get() lea el valor disponible antes de darle otro
wait () ;
} catch (InterruptedException e) { }
}
// ofrece un nuevo valor y lo declara disponible
 contents = valué;
available = true;
// notifica que el valor ha sido cainbiado
notifyAll();
}

No hay comentarios:

Publicar un comentario