/**************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* wechselseitiger Ausschluss mit Semaphor: */ /* Seit der Version 5 stellt Java die Klasse "Semaphor" zur */ /* Verfuegung. */ /**************************************************************/ import java.util.concurrent.*; /* Thread, der einen wechselseitigen Ausschluss mit Hilfe eines Semaphors durchsetzen moechte. */ class EinThread extends Thread { private Semaphore sem; /* Semaphor-Objekt, mit dem der w.A. durchgesetzt wird. */ private String name; /* Name des Threads, der bei Ausgaben verwendet wird. */ /* Konstruktor */ EinThread(String name, Semaphore sem) { this.name = name; this.sem = sem; } /* run()-Methode mit wechselseitigem Ausschluss */ public void run() { try { sem.acquire(); System.out.println(name+" betritt kritischen Abschnitt"); sleep(2000); System.out.println(name+" verlaesst kritischen Abschnitt"); sem.release(); } catch (Exception e) { } } } /* Hauptprogramm */ class ThreadWAMitSemaphor { public static void main(String[] args) { /* Erzeugung des Semaphor-Objekts fuer den wechselseitigen Ausschluss. */ Semaphore sem = new Semaphore(1); /* Erzeugung und Start zweier Threads, die sich ueber den Semaphor synchronisieren. */ EinThread T1 = new EinThread("T1",sem); EinThread T2 = new EinThread("T2",sem); T1.start(); T2.start(); } }