Threads, zwei methoden gleichzeitig laufen lassen

mindjo

Mitglied
Hallo!

ich habe mich gerade das erste mal mit Threads auseinandergesetzt und bin mir immer noch nicht genau sicher, ob ich es verstanden habe..

Also in meinem Programm will ich, dass zwei Methoden gleichzeitig laufen, und spaeter die Ausgaben dann kombiniert werden..also z.B.

Java:
public class Example {

public Example(String s1, String s2) {

String output_one = method_one(s1);
String output_two = method_two(s2);

// mach iwas damit...
}

public String method_one(String s) {

//do something...
}

public String method_two(String s) {


//do something
}

}

Meine ganzen Methoden und alles befinden sich in der Klasse Example, da sie alle halbwegs dazugehoeren..

Aber ich habe die threads jetzt so verstanden, dass ich jetzt nicht einfach method_one() und method_two() parallel laufen lassen kann, sondern muss erst zwei klassen definieren die Runnable sind, dund dann die methoden aufrufen???

Aber muss ich wirklich jetzt meine Methoden in getrennte Klassen packen, damit diese parallel ausgefuehrt werden :S???
 
no du kannst in einer annonymen inneren Runnable Klasse das aufrufen...
zb so...

Java:
public class Test {

    public static void main(String[] args) {

        Test t = new Test();
        t.doSomething1();

    }

    public void doSomething1() {
        new Thread(new Runnable() {

            @Override
            public void run() {
                doSomething2();
            }
        }).start();
        System.out.println("fertig vor doSomething2");
    }

    public void doSomething2() {
        System.out.println("Starte 2");
        try {
            Thread.sleep(500);
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Fertig 2");
    }
}
 
Hmmm ok, mir ist aber dein Code noch ein bisschen unverstaendlich..

Meine methode1 macht also iwas und ruft dann die zweite methode auf, die dann parallel laueft??Also dosomething2() ist ja nur n thread, die methode 1 ja nicht :S??

Java:
public void doSomething1() {

// hier dann mein programmcode oder??

        new Thread(new Runnable() {
 
            @Override
            public void run() {
                doSomething2();
            }
        }).start();
        System.out.println("fertig vor doSomething2");
    }

Und noch eine Frage, kann man dann iwie feststellen, dass die beiden methoden auch zu ende gelaufen sind? gibt es eine art waitfor() methode?
 
hi,
probier mal den Code von ARadauer, dann sollte dir alles klar sein...

Code:
waitfor()
gibt es nicht, sieh dir mal
Code:
join()
an.
 
Ja ok, hab es ausprobiert... die printlns haben ja auch angedeutet, wie das programm abgearbeitet wird.
Java:
    public void doSomething1() {
        new Thread(new Runnable() {
 
            @Override
            public void run() {
                doSomething2();
            }
        }).start();
        System.out.println("fertig vor doSomething2");
        for (int i = 0; i < 100000;i++) {
        	System.out.println("a");
        	
        }
    }
 
    public void doSomething2() {
        System.out.println("Starte 2");
        for (int i = 0; i < 100000;i++) {
        	System.out.println("b");
        	
        }
   
        System.out.println("Fertig 2");
    }

Also die methoden werden parallel durchgefuehrt, jedoch ist ist die erste vorher fertig, richtig?
 

Zurück
Oben