Threads run - Funktion wird nur einmal ausgeführt.

stefan82

Neues Mitglied
Hallo!

Ich versuche eine Endlosschleife in mein Programm einzufügen.
Leider funktioniert es nicht wie gedacht.
Daher habe ich nun nur den wichtigen Code nochmal herausgenommen.
Problem: die run-Funktion wird nur einmal durchlaufen.

Java:
public class testRun extends Thread {
   
    public static void main(String[] args) {
        Thread t1 = new Thread( new testRun() );
        t1.start();       
     }
     public void run() {
         System.out.println("Hallo!");
     }
}
 
natürlich wird sie das. Wenn du eine Endlosschleife haben willst, dann musst du halt eine schreiben:
Java:
public void run() {
  while(...) {
    ...
  }
}
Warum sollte die auch mehrmals aufgerufen werden? Durch Thread.start() wird nur dafür gesorgt, das die run-Methode in einem eigenständigen Thread läuft. Das du gerne eine Endlosschleife haben willst, weiß Java natürlich nicht, deswegen musst du es eben selbst reinschreiben.
 
Wieso willst du eine Endlosschleife gerade so umsetzen?

So funktioniert es auf deine Weise:
Java:
public class Test extends Thread {

    public static void main(String[] args) {
        new Test().run();
     }
  
     public void run() {
         Thread t1 = new Thread( new Test() );
         t1.start();
         System.out.println("Hallo!");
     }
  
}


Wenn es dir aber wirklich nur dadurch geht einen bestimmten Code immer und immer wieder durchzuführen, dann nimm doch eine normale Schleife?

Java:
public class Test {

    public static void main(String[] args) {
        boolean repeat = true;
        do {
            // tue irgendwas und setze irgendwann repeat auf false
            System.out.println("Hallo!");
        } while (repeat);
     }  
}


*Nachtrag: Da war wohl jemand schneller als ich mit antworten^^*
 
So funktioniert es auf deine Weise:
Java:
public class Test extends Thread {

    public static void main(String[] args) {
        new Test().run();
     }

     public void run() {
         Thread t1 = new Thread( new Test() );
         t1.start();
         System.out.println("Hallo!");
     }

}
Vorsicht, dadurch wird ununterbrochen ein neuer Thread erzeugt! Extrem verschwenderisch und rechenintensiv^^. Also bleib besser bei einer Schleife
 
@InfectedBytes: Ja das stimmt, er hat aber mit dieser Thread-Sache angefangen, da wollte wo den Fehler aufzeigen.
Richtig ist es aber eine normale Schleife zu nutzen!
 
Der ThreadErsteller will vermutlich eine Endlosschleife in einem separaten Thread machen und ist davon ausgegangen, das die run Methode automatisch endlos läuft.
 
so ungefähr?

Java:
public class ThreadTest {

    private static boolean running = true;

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while (running) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }
                    System.out.println("ich laufe im Thread");
                }
            }
        });

        System.out.println("Ich starte jetzt den Thread");
        t.start();
      
        Thread.sleep(5000);
        System.out.println("jetzt wirds langweilig");
        Thread.sleep(2000);
        System.out.println("schluss jetzt");
        running = false;

    }
}
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben