package javacodebook.thread.simplethread;

import java.util.Random;

/**
 * Eine Klasse, die von der Klasse Thread erbt und damit dazu genutzt werden
 * kann, parallel zu anderen Programmteilen abgearbeitet zu werden.
 *
 * @author Mark Donnermeyer
 */
public class SimpleThread extends Thread {
    private static Random random = new Random(System.currentTimeMillis());
    
    public SimpleThread(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++) {
            // Es geht auch ohne sleep. Mit sleep läßt sich das Geschehen aber
            // besser verfolgen.
            try {
                sleep(random.nextInt(1000));
            }
            catch (InterruptedException e) { e.printStackTrace();}
            
            // Ein Lebenszeichen des Thread. Damit auch sicher ist, dass die
            // Ausgaben dann erscheinen, wenn sie produziert werden, wird
            // die Methode flush() aufgerufen.
            System.out.println(getName() + ": " + i );
            System.out.flush();
        }
        System.out.println(getName() + ": fertig");
    }
    
    public static void main(String []args) {
        // Zur Verdeutlichung der Nebenläufigkeit werden zwei Threads erzeugt
        // und anschliessend gestartet.
        SimpleThread s1 = new SimpleThread("Anton");
        SimpleThread s2 = new SimpleThread("Berta");
        
        // Jetzt gehts los. Die Threads werden gestartet.
        s1.start();
        s2.start();
        System.out.println("Main: fertig");
    }
}
