Ich will, dass mein Thread parallel läuft aber es tut nicht so.
Wiese läuft meine Code nicht parallel? Wo ist mein Fehler?
Java:
publicclassPauseThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println("Starte Thread");for(int i =0; i <10; i++){System.out.println(i);}System.out.println("Beende Thread");}}
Dein Main-Thread schläft ja auch durch die zwei `Thread.sleep(1000)` zwischen den Ausführungen der beiden parallelen Threads `thr` und `thr1`. Achte bitte darauf, dass `thr.sleep(1000)` bzw. `thr1.sleep(1000)` NICHT den parallelen Thread schlafen lägt, sondern IMMER den ausführenden Thread. Diese Methoden sind static Methoden und KEINE Instanzmethoden der Thread-Klasse!
Jede IDE sollte dir das auch sagen. Das heißt, deine sleep()-Aufrufe sind eigentlich `Thread.sleep(1000)`.
Deine Threads würden parallel warten, allerdings machst du zwischen dein beiden Starts eine Pause von einer Sekunde, sodass der erste schon längst fertig ist, wenn der zweite gestartet wird.
Thread.sleep ist einen statische Methode, und lässt immer den aktuelle Thread, aus dem es heraus aufgerufen wird, schlafen. In deinem Fall also beide Male die main-Methode, und nicht die beiden Threads.
Dein Main-Thread schläft ja auch durch die zwei `Thread.sleep(1000)` zwischen den Ausführungen der beiden parallelen Threads `thr` und `thr1`. Achte bitte darauf, dass `thr.sleep(1000)` bzw. `thr1.sleep(1000)` NICHT den parallelen Thread schlafen lägt, sondern IMMER den ausführenden Thread. Diese Methoden sind static Methoden und KEINE Instanzmethoden der Thread-Klasse!
Jede IDE sollte dir das auch sagen. Das heißt, deine sleep()-Aufrufe sind eigentlich `Thread.sleep(1000)`.
Also wie ich von dir und von @mrBrown verstanden habe Ich darf sleep Mathode nicht in Main Methode nutzen, weil es auch ganze main Methode schlafen gelegt wird. Ist das Richtig so?
Ich habe in andere Klasse wo ich mein run Methode habe mein sleep Methode implementiert und so funktioniert.
Java:
System.out.println("Starte Thread");for(int i =10; i <20; i++){System.out.println(i);try{Thread.sleep(1000);}catch(InterruptedException e){System.out.println("Irgendwas ist schief gelaufen ");
e.printStackTrace();}}System.out.println("Beende Thread");
Aber ich verstehe nicht, wie es nur mit eine sleep Methode funktioniert.
Ich nütze keine richtige Editor mehr, weil ich die Klausur auf dem Papier schreiben soll und Eclipse oder andere Editoren haben zu viele Hilfe, was währen der Prüfung gar nicht hat.
Also wie ich von dir und von @mrBrown verstanden habe Ich darf sleep Mathode nicht in Main Methode nutzen, weil es auch ganze main Methode schlafen gelegt wird. Ist das Richtig so?
Wie man mit einem sleep Method zwei Thread zum schlafen legt.
Ich dachte jede start Methode braucht eine eigene sleep Methode, aber anscheinend ist nicht so.
Ich wollte nur wissen wie es genau die sleep Methode funktioniert.
Die Methode hält eine Thread mit bestimmte Anzahl von Millisekunden an in diese Zeit kann eine zweite Thread gestartet werden. Die zweite Thread wird auch angehalten für eine Bestimmte Zeitraum und so weite. Das ist alles, was ich über sleep Methode weis.
In obigen Bespiel gibt es drei Threads: mainThread, thr und thr1.
Thread.sleep wird im Main-Thread aufgerufen, hält also auch den Main-Thread an. thr und thr1 werden dadurch nicht beeinflusst.
Thread.sleep ist völlig unabängig von anderen gestarteten Threads. Willst du einen zweiten Thread starten und dieser soll pausieren, muss sleep aus diesem heraus aufgerufen werden.