Nebenläufigkeit in Java

Siehe hierzu: Goto Java 2, Kapitel 22

Was ist ein Prozess?

Jedes auf einem Computer gerade ablaufende Programm nennt man einen Prozess. Auf modernen Computern können mehrere Prozesse gleichzeitig ablaufen, ohne sich gegenseitig zu stören (UNIX kann das schon seit den späten 60er Jahren). Z.B. kann man auf einem Computer gleichzeitig einen Text schreiben und eine Webseite herunterladen. Prozesse laufen in unterschiedlichen Adressräumen (damit sind Speicheradressen gemeint).

Threads

Auch innerhalb eines Java-Programms können Teile des Programms nebeneinander laufen. Damit das geht braucht man die Klasse Thread. Mit ihr kann man sodann Threads erzeugen. Ein Thread ist so etwas wie ein kleiner Prozess. Deshalb findet man dafür auch den Begriff lightweight process. Alle Threads innerhalb eines laufenden Programms teilen sich den gemeinsamen Adressraum.

Computerprogramme waren ursprünglich so gestaltet, dass alle Anweisungen nacheinander, also quasi wie am Schnürchen (= Thread) abliefen. Moderne Programmiersprachen erlauben es, dass Teile eines Programms parallel zu anderen Teilen ablaufen können. Es gibt dann mehr als nur ein Schnürchen in so einem Programm.
Die Funktion von Threads besteht also darin, Programmteile parallel zu anderen Programmteilen ablaufen zu lassen.

Verwendung von Threads

Threads werden in Java durch die Klasse Thread und das Interface Runnable realisiert.
Das "Hauptprogramm" eines Threads steht in der Methode run(). Diese muß jeder Thread, also jede von Thread abgeleitete Klasse implementieren.
Damit mehrere Threads sich nicht gegenseitig gemeinsame Daten überschreiben, stellt Java gewisse Synchronisationsverfahren zur Verfügung. Hier sei auf Doku und Literatur (s.o.) verwiesen. In diesen Zusammenhang gehört auch das Keyword synchronized.

Man startet einen Thread durch die Methode start(). Ein Thread endet von selbst, wenn seine Methode run() beendet ist. Man kann einen Thread durch die Methode interrupt() beenden. Dazu ist aber eigene Programmierarbeit innerhalb der Methode run() erforderlich. Im Zusammenhang damit stehen die Methoden interrupted() und isInterrrupted(). Die Java-Dokumentaion zu java.lang.Thread enthält auch Beispiele zur Verwendung von Threads.