Kleines Nachschlagewerk Informatik
Threads
Worum geht es?
Häufig möchte man, dass Dinge parallel laufen. Einfachstes Beispiel ist eine Uhr. Diese soll zählen, das programm soll aber bedienbar bleiben. Kleine Nebenprogramme, die derartiges erlauben, nennt man Threads. Mit Threads hat man sozusagen Multitasking im eigenen Programm.
Was braucht ein Thread?
Ein Thread braucht zum einen ein Objekt, dass ihn steuert und natürlich braucht man den Code, der parallel ablaufen soll.
Zwei Möglichkeiten
Das Objekt ist immer ein Objekt der Thread-Klasse. Lediglich beim Code hat man als Programmierer zwei Möglichkeiten. Braucht man im Programm nur einen Thread (genauer: Threads einer Sorte), dann kann man den Code in die Klasse (meistens das Fenster) packen. Andernfalls muss man eigene Thread-Klassen erstellen.

Da in 95% aller Fälle nur ein Thread benötigt wird und diese Variante auch einfacher ist, wird hier nur diese beschrieben.
Eine Uhr im Fenster
Die Erstellung des Threads soll an einem Beispiel gezeigt werden. Basis ist eine Fensterklasse NewJFrame und ein Label namens jLabel1. Im Label soll eine Zahl im Sekundentakt hochzählen.

Zuerst wird der Klasse gesagt, dass sie eine run-Methode bekommen wird. Es wird am Anfang "implements Runnable" hinzugefügt.

      public class NewJFrame extends javax.swing.JFrame
          implements Runnable
      {
            
Sofort wird von NetBeans kritisiert, dass die Methode run() noch nicht existiert. Also wird sie eingefügt, z.B. hinter dem Konstruktor NewJFrame().

      public void run()
      {
      }
            
Die Routine ist noch leer. Also kommt Code hinzu. count ist der Zähler, Thread.sleep wartet 1000 Millisekunden. Thread.sleep muss immer durch try-catch gekapselt werden.

      public void run()
      {
          int count = 0;
          while (true)
          {
              jLabel1.setText("" + count);
              count++;
              try { Thread.sleep(1000); } catch (Exception e) {}
          }
      }
            
Zum Schluss muss noch ein Thread-Objekt erstellt und gestartet werden. Dies kann zum Beispiel im Konstruktor nach initComponents() erfolgen, aber auch an einen Button gekoppelt sein.

      Thread thread = new Thread(this);
      thread.start();
            
Zur Beachtung