Skip to main content
Top

2008 | Book

Parallele Programmierung spielend gelernt mit dem Java-Hamster-Modell

Programmierung mit Java-Threads

insite
SEARCH

Table of Contents

Frontmatter
Kapitel 1. Einleitung
Zusammenfassung
Bei der „normalen“ Programmierung mit Java haben wir es mit der Entwicklung sequentieller Programme zu tun. Sequentielle Programme sind dadurch gekennzeichnet, dass bei ihrer Ausführung ein einzelner Prozess erzeugt wird, der die Anweisungen des Programms nacheinander ausführt. In diesem Buch werden wir uns mit parallelen Programmen auseinandersetzen. Im Unterschied zu sequentiellen Programmen werden bei der Ausführung paralleler Programme in der Regel mehrere Prozesse gestartet, die gleichzeitig aktiv sind und gemeinsam versuchen, das gegebene Problem zu lösen.
Kapitel 2. Das Hamster-Modell
Zusammenfassung
Computer können heutzutage zum Lösen vielfältiger Aufgaben genutzt werden. Die Arbeitsanleitungen zum Bearbeiten der Aufgaben werden ihnen in Form von Programmen mitgeteilt. Diese Programme, die von Programmierern entwickelt werden, bestehen aus einer Menge von Befehlen bzw. Anweisungen, die der Computer ausführen kann. Die Entwicklung solcher Programme bezeichnet man als Programmierung.
Kapitel 3. Selbstständige Hamster
Zusammenfassung
Bisher kennen Sie die Hamster als völlig passive Geschöpfe. Sie werden von Ihnen als Programmierer erzeugt und warten dann darauf, dass ihnen Befehle mitgeteilt werden, die sie anschließend ausführen. Sie als Programmierer geben dabei vor, welcher Hamster wann und in welcher Reihenfolge welche Aktionen ausführt.
Kapitel 4. Threads
Zusammenfassung
In Kapitel 2 haben Sie erfahren, was selbstständige Hamster sind und wie parallele objektorientierte Hamster-Programme, d.h. Programme mit selbstständigen Hamstern, implementiert werden. Kapitel 2 war dabei ein eher motivierendes Kapitel, das Ihnen einen kleinen Einblick in die Welt der parallelen (Hamster-) Programmierung geben sollte.
Kapitel 5. Scheduling
Zusammenfassung
Bisher wissen Sie noch nicht allzu viel über Threads, außer dass sie gestartet werden können und dann quasi-parallel zu anderen Threads innerhalb einer JVM ablaufen. Wie aber werden Threads durch die JVM verwaltet? Wie wird gesteuert, welcher Thread gerade den Prozessor zugeteilt bekommt? Was für Möglichkeiten gibt es, Threads zu manipulieren? Welche Methoden definiert die Klasse Thread? Genau diesen Fragen werden wir in diesem Kapitel nachgehen.
Kapitel 6. Kommunikation zwischen Threads
Zusammenfassung
Eigentlich müssten die Hamster nun glücklich sein. Sie sind selbstständig und können eigenständkg ihnen übertragene Aufgaben erledigen. Aber so richtig glücklich fühlen sie sich im Moment immer noch nicht. Sie sind einsam. Ihnen fehlt der Kontakt zu anderen Hamstern. Sie möchten gemeinsam mit anderen Hamstern ihnen gegebene Probleme bewältigen. Und in der Tat, schauen Sie sich noch einmal die Beispielprogramme der vorangehenden Kapitel an. Im Allgemeinen agieren die Hamster zwar selbstständig aber vollständig unabhängig voneinander. Es gibt keine unmittelbaren Beziehungen zwischen den Hamstern.
Kapitel 7. Mehrseitige Synchronisation
Zusammenfassung
In Kapitel 6 haben wir gelernt, wie gemeinsame Variablen bzw. Objekte zur Kommunikation zwischen mehreren Threads genutzt werden können. Der wechselseitige Zugriff durch mehrere Threads auf dieselben Variablen oder andere Ressourcen kann jedoch zu schweren Fehlern führen. Das Wort „kann“ ist hier bewusst fett gedruckt, denn derartige Fehler treten im Allgemeinen nur ausgesprochen selten auf. Sie sind schwer zu entdecken und entsprechende Testsituationen sind nur schwer reproduzierbar. Und gerade deswegen ist es sehr wichtig, sich intensiv damit zu beschäftigen.
Kapitel 8. Einseitige Synchronisation
Zusammenfassung
In Kapitel 7 haben wir den Bedarf der Synchronisation mehrerer Threads erörtert. Bei der Lösung vieler Probleme müssen sich die Threads untereinander abstimmen. Sie können nicht mehr vollkommen unabhängig voneinander agieren. Die Abstimmung wird dadurch erreicht, dass die betroffenen Aktivitäten eines Threads mit den betroffenen Aktivitäten anderer Threads in eine zeitliche Abfolge gebracht werden, indem ihre Ausführung verzögert wird.
Kapitel 9. Verklemmungen
Zusammenfassung
Wahrscheinlich haben Sie es bei der Bearbeitung der Übungsaufgaben der vorausgehenden Kapitel schon mehr als einmal erlebt, dass plötzlich alle Hamster stillstanden, das Programm aber noch nicht beendet war. Solche Situationen, auf die in den vorausgehenden Kapiteln ja auch schon hingewiesen wurde, werden Verklemmungen genannt. Häufig wird der englische Begriff Deadlock synonym zu dem deutschen Begriff Verklemmung verwendet. Allerdings gibt es neben Deadlocks mit den so genannten Livelocks einen weiteren andersartigen Typ von Verklemmungen, bei dem die Prozesse in einem Zustand verharren, in dem sie immer wieder dasselbe tun. Allgemein spricht man von einer Verklemmung, wenn das Programm (bzw. mehrere Prozesse), einen Zustand erreicht, den es nicht mehr verlässt, der aber nicht der gewünschte Endzustand ist.
Kapitel 10. Beendigung von Threads
Zusammenfassung
Leider können wir uns nicht nur mit den schönen Dingen des (Hamster-)Lebens beschäftigen, sondern müssen auch einmal an weniger erfreuliche Dinge denken, wie den Hamstertod bzw. verallgemeinert die Beendigung von Threads. Diesem Thema werden wir uns in diesem Kapitel zuwenden müssen.
Kapitel 11. Klassische Probleme der parallelen Programmierung
Zusammenfassung
In den vorausgehenden Kapiteln haben Sie sich mit einer Menge von Konzepten der parallelen Programmierung im Allgemeinen und der Java-Thread-Programmierung im Speziellen vertraut gemacht. Sie wissen nun insbesondere, was Threads sind, Sie haben erfahren, was Scheduling bedeutet und Sie haben durch das Lösen von Hamster-Problemen kennengelernt, wie Threads miteinander kommunizieren und sich untereinander synchronisieren können. Mechanismen zur Umsetzung dieser Basiskonzepte der (quasi-)parallelen Programmierung stellt Java insbesondere über die JDK-Klassen java. lang. Thread und java. lang. Object zur Verfügung.
Kapitel 12. Sperren
Zusammenfassung
Sperren sind unabdingbar, damit Threads miteinander sicher kommunizieren, kooperieren und sich koordinieren können. Als Sperren werden dabei Hilfsmittel bezeichnet, die zu einer kontrollierten reversiblen Blockade von Threads eingesetzt werden können. Mit der synchronized-Anweisung stellt Java seit der ersten Version einen mächtigen Sperr-Mechanismus zur Verfügung.
Kapitel 13. Zugabe
Zusammenfassung
Genauso wie bereits im vorangehenden Kapitel werden in diesem Kapitel Konzepte der parallelen Programmierung bzw. der Thread-Programmierung in Java vorgestellt, die erst mit der Version 1.5 bzw. 5.0 in Java integriert wurden. Die entsprechend zur Verfügung gestellten Klassen sind dabei eigentlich obsolet und können prinzipiell mit den Basis-Thread-Mechanismen von Java reimplementiert werden.1 Daher ist dieses Kapitel auch mit „Zugabe“ betitelt. Die Klassen erleichtern einem Programmierer jedoch in vielen Fällen das Leben. Daher dient dieses Kapitel zum einen zur Vorstellung weiterführender Konzepte der parallelen Programmierung und zum anderen auch der Wiederholung und Vertiefung beim Einsatz der Basis-Thread-Mechanismen.
Backmatter
Metadata
Title
Parallele Programmierung spielend gelernt mit dem Java-Hamster-Modell
Author
Dietrich Boles
Copyright Year
2008
Publisher
Vieweg+Teubner
Electronic ISBN
978-3-8351-9242-3
Print ISBN
978-3-8351-0229-3
DOI
https://doi.org/10.1007/978-3-8351-9242-3

Premium Partner