package javacodebook.thread.join;

import java.util.Random;

/**
 * Demonstation der Möglichkeit, einen Thread auf andere Threads warten zu
 * lassen. Die main()-Routine wartet solange, bis alle Threads ihre Arbeit 
 * erledigt haben, bevor sie sich selber - und damit das Programm - beendet.
 *
 * @author Mark Donnermeyer
 */
public class JoinedThread extends Thread {
    public JoinedThread(String name) {
        super(name);
    }
    
    public void run() {
        // Der Thread zeigt 10 mal an, dass er lebt und legt sich zwischendurch
        // für eine zufällige Zeit zwischen 0 und 1 Sekunde schlafen.
        for (int i=0; i<10; i++) {
            // Ein Lebenszeichen des Thread.
            System.out.println(getName() + ": " + i );
        }
        System.out.println(getName() + ": fertig");
    }
    
    public static void main(String []args) throws Exception {
        // Zur Verdeutlichung der Nebenläufigkeit werden zwei Threads erzeugt
        // und anschliessend gestartet.
        JoinedThread s1 = new JoinedThread("Anton");
        JoinedThread s2 = new JoinedThread("Berta");
        
        // Jetzt gehts los. Die Threads werden gestartet.
        s1.start();
        s2.start();
        
        // Das Hauptprogramm wartet darauf, dass beide Threads ihre Arbeit
        // erledigt haben und nicht mehr ausgeführt werden.
        s1.join();
        s2.join();
        
        System.out.println("Main: fertig");
    }
}