Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:threads:start

Dies ist eine alte Version des Dokuments!


Threads, Synchronisation

Viele aktuelle Prozessoren haben mehr als einen Kern und sind so in der Lage, mehrere Programme gleichzeitig auszuführen. Die Programmiersprache Java ermöglicht es, dies auszunutzen und mehrere Methoden zu starten, die dann gleichzeitig ausgeführt werden. Mann spricht dann von mehreren Threads („Ausführungssträngen“).

Genauer:

  • Falls genug Prozessorkerne zur Verfügung stehen, werden die Threads echt parallel ausgeführt.
  • Falls nicht genug Prozessorkerne zur Verfügung stehen, werden die Threads abwechselnd pausiert/fortgeführt (preemptive Multitasking).

Um einen Thread parallel zum Hauptprogramm zu starten schreibt man eine Klasse (z.B. MyTask), die das Interface Runnable implementiert und schreibt die Anweisungen, die ausgeführt werden sollen, in ihre run-Methode:

class MyTask implements Runnable {
   void run(){
      // Die Anweisungen, die hier stehen, werden parallel zum Hauptprogramm ausgeführt.
   }
}

Anschließend übergibt man ein MyTask Objekt an ein Thread-Objekt und ruft dessen start-Methode auf:

Thread t = new Thread(new MyTask());
t.start();
 
// Alle Anweisungen ab hier werden schon parallel zur run-Methode des MyTask-Objekts ausgeführt!

Die start-Methode führt dann die run-Methode in einem neuen Thread parallel zum Hauptprogramm aus.

Beispiel 1: 11 Threads zählen gleichzeitig

Race condition und Lösungen

Im folgenden Beispiel versuchen drei Threads gleichzeitig je 10-mal, einen Counter zu erhöhen. Da die Methode increment der Klasse Counter nicht atomar ist (d.h. sie wird nicht in einem „Schritt“ ausgeführt), kommt es vor, dass

api/documentation/threads/start.1730122033.txt.gz · Zuletzt geändert: 2024/10/28 14:27 von martin