Un monitor es un enfoque para sincronizar dos o más tareas que usan recursos compartidos, generalmente dispositivos separados (impresoras) o conjuntos de variables.
En el pasado, los sistemas operativos se reducían a un simple programa de monitoreo que encadenaba la ejecución de otros (por ejemplo, el DOS de IBM 360 a fines de la década de 1960). Este significado es inusual hoy en día y no tiene nada que ver con el significado actual (sincronización).
Un monitor se compone de:
Considere dos hilos que desean comunicarse entre sí. El primer hilo envía mensajes al segundo hilo a través de una cola . Si la cola está vacía, el segundo hilo debe esperar un nuevo mensaje. Dicha cola se puede implementar usando el siguiente código:
import java.util.*; public class EchangeMessage { private ArrayList l = new ArrayList(); public void enfiler(Object o) { l.add(o); if(l.size()==1) { try { this.notify(); } catch (IllegalMonitorStateException e) {} } } public Object defiler() { if(l.size()==0) { try { this.wait(); } catch (InterruptedException e){} } Object o = l.get(0); l.remove(0); return o; } public synchronized boolean vide() { return l.isEmpty(); } } |
Esta clase usa tres métodos.
Es posible hacer las siguientes observaciones sobre el funcionamiento de Java en relación con este ejemplo:
|