Zurück zum Manuskript
// Datei: Wartegraph.java // Datum: 19.10.2018 // Autor: Brecht // Das Programm setzt insgesamt drei Threads, einschließlich // des main-Threads, ein. Dabei wird jeder der Befehlsfolgen A, // B, C und D des Wartegraphen durch einen Thread.sleep()-Aufruf // eine gewisse (experimentell nutzbare) zeitliche Dauer // gegeben. // Die Klasse Wartegraph enthält den main-Thread. Er // instanziiert zwei Klassen namens Thread1 und Thread2, die // wiederum jeweils einen Thread implementieren. Dem Konstruktor // der Klasse Thread1 wird eine Referenz auf die gerade erzeugte // Instanz der Klasse Thread2 übergeben, damit dieser den // Thread zur Klasse Thread2 starten kann. // Danach startet der main-Thread den zur Klasse Thread1 // gehörenden Thread und arbeitet selbst die Befehlsfolge A // ab. Nach derem Ende wartet er auf das Ende der Threadinstanz // thr1, die unter anderem die Befehlsfolge B abgearbeitet hat. // Ist dieses Ende erreicht, arbeitet er die Befehlsfolge C ab // und wartet anschließend auf das Ende des zur Klasse // Thread2 gehörenden Threads, der die Befehlsfolge D // abarbeitet. class Wartegraph { public static void main(String[] args) throws Exception { System.out.println("main beginnt"); Thread2 thr2 = new Thread2(); Thread1 thr1 = new Thread1(thr2); thr1.start(); System.out.println("A beginnt"); Thread.sleep(200); System.out.println("A endet"); thr1.join(); System.out.println("C beginnt"); Thread.sleep(200); System.out.println("C endet"); thr2.join(); System.out.println("main endet"); } } class Thread2 extends Thread { public void run() { System.out.println("D beginnt"); try { Thread.sleep(200); } catch(Exception e) {} System.out.println("D endet"); } } class Thread1 extends Thread { Thread2 thr2 = null; Thread1(Thread2 thr2) { this.thr2 = thr2; } public void run() { System.out.println("B beginnt"); try { Thread.sleep(200); } catch(Exception e) {} System.out.println("B endet"); thr2.start(); } }

Zurück zum Manuskript