/***************************************************************/
/* Prof. Dr. Carsten Vogt                                      */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                      */
/* http://www.nt.fh-koeln.de/vogt                              */
/*                                                             */
/* join(), isAlive():                                          */
/* Das Programm startet einen Thread "Thread 1", der ca. zwei  */
/* Sekunden laeuft. Ein zweiter Thread "Thread 2" prueft zu-   */
/* naechst, ob der andere Thread laeuft, wartet auf seine Ter- */
/* minierung und prueft dann abschliessend nochmals, ob er     */
/* noch laeuft.                                                */
/***************************************************************/

class Thread1 extends Thread {

 /* Der Thread wird zwei Sekunden lang ausgefuehrt
    und terminiert dann */
 
 public void run() {
  try {
   System.out.println("Thread 1: Ich laufe an");
   sleep(2000);
   System.out.println("Thread 1: Ich terminiere");
  } catch (java.lang.InterruptedException e) {}
 }
 
}

class Thread2 extends Thread {

 /* Der Thread prueft zunaechst, ob ein anderer Thread laeuft,
    wartet dann auf dessen Terminierung und prueft abschliessend
    nochmals, ob er laeuft. */

 private Thread WartenAuf; /* Thread, auf den gewartet wird */

 /* Konstruktor: Festlegung des Threads, auf den gewartet wird. */

 Thread2(Thread w) {
  WartenAuf=w;
 }

 public void run() {
  try {
   /* Test, ob anderer Thread laeuft */
   if (WartenAuf.isAlive())
     System.out.println("   Thread 2: Thread 1 laeuft");
    else System.out.println("Thread 2: Thread 1 laeuft nicht!!!");
   /* Warten auf den anderen Thread */
   System.out.println("   Thread 2: Ich warte auf Thread 1");
   WartenAuf.join();
   System.out.println("   Thread 2: Warten beendet");
   /* Nochmaliger Test, ob anderer Thread laeuft */
   if (WartenAuf.isAlive())
     System.out.println("   Thread 2: Thread 1 laeuft immer noch!!!");
    else System.out.println("   Thread 2: Thread 1 laeuft nicht mehr");
  } catch (java.lang.InterruptedException e) {}
 }

}

public class Join {

 /* Hauptprogramm */

 public static void main(String[] args) {

  System.out.println();

  /* Erzeugung der Threads */
  Thread1 t1 = new Thread1();
  Thread2 t2 = new Thread2(t1);

  /* Starten der Threads */
  t1.start();
  t2.start();

 }

}

