Monitor je přístup k synchronizaci dvou nebo více úkolů, že použití sdílených zdrojů, obvykle samostatná zařízení (tiskárny) nebo sady proměnných.
V minulosti byly operační systémy redukovány na jednoduchý monitorovací program, který zřetězil provádění jiných (například DOS IBM 360 na konci 60. let). Tento význam je dnes neobvyklý a nemá nic společného se současným významem (synchronizace).
Monitor se skládá z:
Zvažte dvě vlákna, která chtějí navzájem komunikovat. První vlákno odesílá zprávy do druhého vlákna prostřednictvím fronty . Pokud je fronta prázdná, musí druhé vlákno čekat na novou zprávu. Takovou frontu lze implementovat pomocí následujícího kódu:
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(); } } |
Tato třída používá tři metody.
Je možné učinit následující poznámky týkající se fungování Java ve vztahu k tomuto příkladu:
|