Parallele und verteilte Anwendungen in Java
Die große Herausforderung für gute Programmierer sind heute parallele Anwendungen. Im Buch parallele und verteilte Anwendungen in Java lernt man wie man mit Threads Programme unter Java auf Multikern Systemen erstellt um dadurch diese leistungsfähiger macht. Neben dem lokalen Blick auf einen Rechner werden auch noch Möglichkeiten vorgestellt diese Programme zu verteilen um somit ganze Rechnernetze zu nutzen. All das objektorientiert in Java.
Parallele und verteilte Anwendungen in Java
In der mittlerweile 5. Auflage von „Parallele und verteilte Anwendungen in Java“ gibt es nun ein aktuelles Java Fachbuch, dass sich der Parallelität von Programmen widmet. Das Buch wurde vor allem hinsichtlich der neuen Elemente von Java 8 (Lamba-Ausdrücke, Data-Streaming-Framework, usw.) und diverser Kleinigkeiten aktualisiert. Das Kapitel über Threads in Programmen mit grafischer Oberfläche wurde Swing durch JavaFX als modernere Grafikbibliothek ausgetauscht.
Das Buch ist im Hanser Verlag erschienen und kann dort im Shop als Buch oder eBook gekauft werden. Ich kann das Buch empfehlen, denn im Buch befindet sich auch ein Code für den Download des eBooks. Für Interessierte gibt es auch zwei Leseproben als PDF zum Download. Am besten einfach mal ausprobieren.
Inhalt
Das Fachbuch verspricht einen fundierten und ausführlichen Einstieg in ein sehr wichtiges Thema moderner Anwendungsprogrammierung. Es gibt kaum noch Rechner die nicht von parallelisierten Programmen profitieren. Das Buch ist wie folgt gegliedert:
- Einleitung
Im ersten Kapitel geht es theoretisch um Programme, Prozesse und Threads. Außerdem werden Begriffe wie Parallelität, Nebenläufigkeit und Verteilung erklärt beziehungsweise voneinander abgegrenzt. - Grundlegende Synchronisierungskonzepte in Java
Das Kapitel zu den Grundlagen behandelt im Detail wie man Threads erzeugt und diese mit Java threadsicher macht. Das heißt was wait, notify und notifyAll ist und wie man synchronized verwendet. - Fortgeschrittene Synchronisierungskonzepte in Java
Das Wissen aus dem vorangegangenen Kapitl wird nun um weiterführende Beispiele erweitert. Dabei werden Semaphoren, Message Queues und Pipes erklärt. Danach gundsätzliche Probleme thematisiert, die jedes Betriebssystem lösen muss: Philosophen Problem und Leser-Schreiber-Problem. Im folgenden werden diese in Java nachgebaut und mit den Java Bibliotheken Concurrent, Fork-Join, Data-Streaming und Completable umgesetzt. Zuletzt werden noch Verklemmungen thematisiert und anhand einer Liste gezeigt, welche Voraussetzungen zu Verklemmungen führen. - Parallelität und grafische Benutzeroberflächen
Nach einer Einführung in JavaFX wird gezeigt wie man Benutzeroberflächen unter Einsatz von Threads optimiert. Dabei steht der MVP Ansatz im Mittelpunkt. - Verteilte Anwendungen mit Sockets
In diesem Kapitel geht es um die Server Client Programmierung mit Sockets unter Einsatz von UDP und TCP. - Verteilte Anwendungen mit RMI
Im folgenden Kapitel wird gezeigt wie man ohne Sockets und RMI verteilte Anwendungen realisiert. Dabei wird RMI vorgestellt und dessen Verwendung anhand eines Beispiels erläutert. - Webbasierte Anwendungen mit Servlets und JSF
Das letzte Kapitel zeigt noch den Ansatz eines Webservers. Dabei werden die Grundlagen erklärt, Stichwörter: HTTP, Servlets, Session, Cookies, JSF und RESTful Schnittstellen. All das auch unter dem Gesichtspunkt der Parallelität und gemeinsamer Daten.
Kritik
Das Buch ist recht gut geschrieben. Code Beispiele und erklärender Text wechseln sich regelmäßig ab. Der Autor setzt gerade bei einführenden Erklärungen sehr gut Grafiken ein, die für das Verständnis hilfreich sind. Längere Textpassagen sind manchmal mühsam zu lesen, aber nötig um das Programm auch zu verstehen. In Summe wird immer ausführlich und dabei kompakt erklärt. Der Text wird nicht durch unnötige Füllwörter und sinnlosen Text verlängert.
Positives
Mir persönlich hat es sehr gut gefallen, dass fertige Java Bibliotheken erst im Nachhinein eingeführt und erklärt werden. Davor wird versucht ein Konzept vom Ansatz zu lösen. Dabei wird mehrmals gezeigt wie ein scheinbar korrektes Programm Fehler verursacht und wie sich diese in der Ausführung auswirken. Gerade dadurch ist die Problematik von gemeinsamen Speicher und falsch gelesenen Werte von Threads sehr gut verständlich. Außerdem ist man dann immer froh, dass Java eine einfach zu nutzende Bibliothek bereitstellt, die sich um all das kümmert.
Code Beispiele werden im Laufe des Buchs öfter wieder aufgegriffen. Beispielsweise um das selbe Programm anders umzusetzen oder aber durch zum Beispiel grafische Elemente zu erweitern. Das hinterlässt einen guten Eindruck, man merkt der Autor hat sich Gedanken über die Beispiele gemacht. Durch diesen Ansatz hat man als Leser auch einen guten Vergleich wie man die selbe Anforderung unterschiedlich umsetzen kann.
Negatives
Ich vermisse im Buch ein wenig den Praxisbezug. Offenbar ist Parallelität in Java Anwendungen sehr wichtig. Doch wo werden diese gut oder schlecht umgesetzt? Ich bin mir sicher es gibt viele Open Source Projekte in denen man die vorgestellten Ansätze finden und dort vom Code lernen kann. Wie das in einer richtig großen Anwendung aussieht, lernt man sonst nur von einem eigenen Projekt. Open Source ist heute so weit verbreitet, ich vermisse in Fachbüchern leider immer wieder einen Bezug zu guten und schlechten Beispielen.
Fazit
Parallele und verteilte Anwendungen in Java ist wieder so ein Fachbuch, dass jeder angehende Entwickler gelesen haben sollte. Das Buch schafft grundlegendes Verständnis darüber, wie ein Prozessor die Prozesse und Threads zur Laufzeit abarbeitet. Dadurch entstehende Probleme beim Zugriff auf gemeinsamen Speicher werden erarbeitet. Dabei werden verschiedene Lösungsansätze besprochen und gezeigt wie man diese Probleme am besten mit Java löst.
Welche Erfahrungen habt ihr mit Java und Threads? Welche Open Source Beispiele kennt ihr die Threads gut oder schlecht verwenden?