Threads Thread sleep() Method einfache Frage

Diskutiere Thread sleep() Method einfache Frage im Java Basics - Anfänger-Themen Forum; Ich will, dass mein Thread parallel läuft aber es tut nicht so. Wiese läuft meine Code nicht parallel? Wo ist mein Fehler? public class...

  1. Bobi
    Bobi Mitglied
    Ich will, dass mein Thread parallel läuft aber es tut nicht so.
    Wiese läuft meine Code nicht parallel? Wo ist mein Fehler?

    Code (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");
         
           }
    }
     
    Code (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: 11. Jan. 2019
  2. Wenn du jetzt Java lernen möchtest, dann sichere dir hier unseren Java-Videokurs heute zum Sonderpreis (hier klicken!)
  3. httpdigest
    httpdigest Bekanntes Mitglied
    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)`.
     
  4. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    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.
     
  5. Bobi
    Bobi Mitglied
    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.
    Code (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.
     
  6. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Du kannst sleep überall aufrufen, aber es stoppt dann eben an genau der Stelle.

    Was verstehst du nicht?
     
  7. Bobi
    Bobi Mitglied
    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.
     
  8. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Ein Thread kann sich nur selbst schlafen legen.
    Wenn der Thread schlafen soll, muss das irgendwo aus der run-Methode heraus aufgerufen werden.

    Was willst du denn mit dem sleep erreichen?
     
  9. Bobi
    Bobi Mitglied
    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.
     
  10. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    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 (Text):

    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.
     
    Bobi gefällt das.
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Thread sleep() Method einfache Frage - Ähnliche Themen

Thread.sleep() Funktion
Thread.sleep() Funktion im Forum Java Basics - Anfänger-Themen
Thread.sleep()
Thread.sleep() im Forum Java Basics - Anfänger-Themen
Fehler bei Thread.sleep()
Fehler bei Thread.sleep() im Forum Java Basics - Anfänger-Themen
Thread.sleep()
Thread.sleep() im Forum Java Basics - Anfänger-Themen
Ersatz für Thread.sleep() in EJBs?
Ersatz für Thread.sleep() in EJBs? im Forum Application Tier
Thema: Thread sleep() Method einfache Frage