/****************************************************************/
/* Prof. Dr. Carsten Vogt                                       */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                       */
/* http://www.nt.fh-koeln.de/vogt                               */
/*                                                              */
/* start(), run(), sleep():                                     */
/* Das Programm erzeugt zwei Threads, die jeweils eine bestimm- */
/* te Anzahl von Runden durchlaufen. Ein Thread gibt in jeder   */
/* Runde einen Text aus und "schlaeft" dann eine bestimmte An-  */
/* zahl von Millisekunden.                                      */
/****************************************************************/


/* Klasse fuer Threads in diesem Beispiel */

class BeispielThread extends Thread {

 /* Ein BeispielThread durchlaeuft 'anzahlRunden'
    Runden. In jeder Runde wartet er 'wartezeit'
    Millisekunden und gibt dann den Text 'ausgabe-
    Text' auf den Bildschirm aus. */

 private String ausgabeText;
 private int    wartezeit;
 private int    anzahlRunden;

 /* Konstruktor: setzt die Attributwerte */

 BeispielThread(String aus, int zeit, int anz) {
  ausgabeText = aus;
  wartezeit = zeit;
  anzahlRunden = anz;
 }

 /* Die Methode run() ueberschreibt die gleichnamige
    Methode der Basisklasse 'Thread'. Sie legt fest,
    welche Operationen der Thread waehrend seines
    "Lebens" ausfuehren soll. */

 public void run() {

  try { /* try-catch ist wegen sleep() noetig */

   for (int i=0; i<anzahlRunden; i++) {
     sleep(wartezeit);
     System.out.println(ausgabeText);
    }
    System.out.println("Fertig "+ausgabeText); 

   } catch (InterruptedException E) {  }

 }

} /* Ende von BeispielThread */


/* Klasse mit Hauptprogramm */

public class ThreadBasics {

 public static void main(String[] args) {

  /* Erzeugung zweier BeispielThreads */

  BeispielThread t1 = new BeispielThread("AAA",2000,6);
  BeispielThread t2 = new BeispielThread("   BBB",3000,4);

  System.out.println();

  /* Start der Threads, 
     die dann jeweils ihre run()-Methode ausfuehren */
     
  t1.start();
  t2.start();
 
 }

}

