
import java.io.*;

// Das Beispiel moechte dreimal die Summe von 1 bis 100 berechnen
// 
// 100*101/2  =  5050
// 5050 * 3 =  15150
// mit Threads, aber ohne Join

public class Thread01  {

   private static void pause() {
    try {
      System.in.read();
    }
    catch (IOException e) {
    }
  }  // pause

   // Test1 rechnet richtig, durch run !!
   // keine Threads
  private void test1() {
    MyThread f1,f2, f3;
    int n=100;
    f1 = new MyThread(n);
    f2 = new MyThread(n);
    f3 = new MyThread(n);
    f1.run();
    f2.run();
    f3.run();
    int Summe = 0;
    Summe = f1.getSumme()+f2.getSumme()+f3.getSumme();
    System.out.println("***************  Summe: "+Integer.toString(Summe) );
  } // create

   // Test2 rechnet falsch, erzeugt aber Threads
   // es fehlt der join
  private void test2() {
    MyThread f1,f2, f3;
    int n=100;
    f1 = new MyThread(n);
    f2 = new MyThread(n);
    f3 = new MyThread(n);
    f1.start();
    f2.start();
    f3.start();

    int Summe = 0;
    Summe = f1.getSumme()+f2.getSumme()+f3.getSumme();
    System.out.println("***************  Summe: "+Integer.toString(Summe) );
  } // test2


   // Test3 rechnet richtig und erzeugt aber Threads
   // nun mit join
  private void test3() {
    MyThread f1,f2, f3;
    int n=100;
    f1 = new MyThread(n);
    f2 = new MyThread(n);
    f3 = new MyThread(n);
    f1.start();
    f2.start();
    f3.start();
    try {
      f2.join();
      f3.join();
      f1.join();
    }
    catch (InterruptedException e) {
    }
    int Summe = 0;
    Summe = f1.getSumme()+f2.getSumme()+f3.getSumme();
    System.out.println("***************  Summe: "+Integer.toString(Summe) );
  } // test3


  public static void main(String[] args) {
    Thread01 frame = new Thread01();
    frame.test1();
    //frame.test2();
    //frame.test3();
    pause();
  }


}



class MyThread extends Thread {

   private int _n;
   private int _summe;

  // Übergabe der Grenze
  public MyThread (int n) {
     _n = n;
  }

  public int getSumme() {
    return _summe;
  }

   public void run() {
    System.out.println("Start Thread");
     _summe = 0;
    for (int i=1; i<=_n; i++) {
      _summe+=i;
      delay(5);
    }
    System.out.println("Ende Thread");
  }

  public static void delay(long time) {
    try {
           Thread.sleep(time);
        } catch (InterruptedException e) {
    }
  }  // delay


   // Thread Methode


}




/*

    try {
      Thread.sleep(50);
    } catch (InterruptedException e) {
    }


*/
