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.