Threads Thread sleep() Method einfache Frage

Bitte aktiviere JavaScript!
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:
public class PauseThread implements Runnable{
   @Override
   public void run(){
       System.out.println("Starte Thread");
        for(int i = 0; i < 10; i++){
           System.out.println(i);
           }
       System.out.println("Beende Thread");
     
       }
}
Java:
public class PauseThreadMain {
 
   public static void main(String[] args){
     
      PauseThread pth = new PauseThread();
      Thread thr = new Thread(pth);
     
      PauseThread pth1 = new PauseThread();
      Thread thr1 = new Thread(pth1);
     
       try{
          thr.start();
          thr.sleep(1000);
          thr1.start();
          thr1.sleep(1000);       
       }catch(InterruptedException e){
          e.printStackTrace();
       } 
    }

}
Ist meine Try catch Methode in Main Methode Falsch ?
 
Zuletzt bearbeitet:
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
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.
 
Was willst du denn mit dem sleep erreichen?
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.
 
Die sleep-Methode hält den aktuellen Thread an.

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.

Grob:
Code:
Main-Thread             thr              thr2
    |                    .                .
    |                    .                .
thr.start();-------------|                .
    |                    |                .
thr.sleep(1000);     thr.run wird         .
    |                ausgeführt           .
    |                                     .
thr1.start();-----------------------------|
    |                                     |
thr1.sleep(1000);                     thr2.run wird
    |                                 ausgeführt

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.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben