Threads



  • Hallo Leute!

    Ich habe eine Klasse mit mehreren Funktionen. Eine Funktion möchte ich jetzt als Thread laufen lassen.

    Geht das?

    Ich kenne bis jetzt nur Beispiele wo ein Objekt von einer Klasse erstellt werden muss die die Funktionen der Klasse Thread erbt (extends Thread).

    Dann gibt es in diesem Objekt nur eine Funktion( im unteren Bsp. run()) die dann mit obj.start() gestartet wird.

    aber ich habe in meiner Klasse mehrere Funktionen und nur eine davon soll als Thread laufen. Wie mach ich das?

    class DemoThread extends Thread {
    
        public void run() {
          for(int i = 0; i < 10; i++) {
            try {
              sleep(5000);
            }
            catch(InterruptedException e) {
            }
            System.out.println("Demo-Thread");
          }
        }
    
      }
    

    Gruß
    WAR][FIRE



  • Du hast im Prinzip schon das was du willst. Die Methode, die im anderen Thread läuft heißt nämlich nicht "z.B." run() sondern immer so. Nur die run() Methode wird in diesem Thread ausgeführt. Wenn du die nicht implementierst macht thread.start() gar nichts, es sein denn du hast im Konstruktor ein Runnable Objekt übergeben (siehe unten). Alle anderen Methoden werden nur von dem Thread ausgeführt von dem aus sie aufgerufen wurden.

    Besser wäre evtl. folgendes Konstrukt, dann ist auch klar, dass die Methode immer run heißen muss weil es sonst nich kompiliert:

    class DemoJob implements Runnable {
    
        public void run() {
          for(int i = 0; i < 10; i++) {
            try {
              sleep(5000);
            }
            catch(InterruptedException e) {
            }
            System.out.println("Demo-Job");
          }
        }
      }
    
    // ... und dann
    DemoJob myjob = new DemoJob();
    new Thread( myjob ).start();
    // statt
    DemoThread mythread = new DemoThread();
    mythread.start()
    

    Damit musst du nicht mehr von Thread ableiten und brauchst das Thread Objekt erst erzeugen wenn du es wirklich verwenden willst und danach wieder GCen lassen. Thread Objekte belegen enorm viel Speicher und sind sehr teuer anzulegen.



  • Ah alles klar. Das löst das Problem! 🙂

    Danke!!!

    Gruß
    WAR][FIRE


Anmelden zum Antworten