/****************************************************************/
/* Prof. Dr. Carsten Vogt                                       */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                       */
/* http://www.nt.fh-koeln.de/vogt                               */
/*                                                              */
/* Ein Thread uebertraegt einen Wert an einen anderen Thread,   */
/* indem er ihn in eine gemeinsam genutzte Variable schreibt.   */
/****************************************************************/


class Thread1 extends Thread {

 /* Thread1 wartet eine Sekunde und weist dann
    einer gemeinsam benutzten Variable i, die
    zuvor den Wert 1 hatte (siehe Hauptprogramm),
    den Wert 2 zu. */

 public void run() {

   try {

    sleep(1000);

    System.out.println();
    System.out.println("t1: Setze i auf 2");
    ThreadDaten.i = 2; 

   } catch (InterruptedException E) {  }
 }

}

class Thread2 extends Thread {

 /* Thread2 gibt zunaechst den Wert der gemeinsam
    benutzten Variablen i aus (1, da sie mit 1 initia-
    lisiert wurde - siehe Hauptprogramm), wartet 2
    Sekunden und gibt dann den i-Wert nochmals aus
    (jetzt 2, da Thread1 den i-Wert in der Zwischen-
    zeit geaendert hat). */

 public void run() {

   try {

    System.out.println();
    System.out.println("t2: i = "+ThreadDaten.i);

    sleep(2000);

    System.out.println();
    System.out.println("t2: i = "+ThreadDaten.i);

   } catch (InterruptedException E) {  }

 }

}

/* Klasse mit dem Hauptprogramm */

public class ThreadDaten {

 static int i = 1;
   /* Die Variable i ist im gesamten Programm nutzbar.
      Sie wird hier mit dem Wert 1 initialisiert. */ 
 
 public static void main(String[] args) {

  /* Erzeugung und Start zweier Threads. */

  Thread1 t1 = new Thread1();
  Thread2 t2 = new Thread2();

  t1.start();
  t2.start();
 
 }

}

