Java-Threads: Eine vergleichende Buchbesprechung

Seit die ersten Ausgaben von Java-Threads von O'Reilly und Concurrent Programming in Java von Addison-Wesley vor einigen Jahren erschienen sind, empfehle ich sie Leuten, die lernen möchten, wie man Threads verwendet. Mit mehreren konkurrierenden Büchern und zweiten Ausgaben der Originale, die jetzt verfügbar sind, habe ich beschlossen, meine Empfehlungen zu überdenken. In diesem Artikel werde ich mir sechs der neuesten Java-Thread-Programmierbücher ansehen.

Die sechs besprochenen Bücher sind:

  1. Java Threads, Zweite Ausgabe, Scott Oaks und Henry Wong (O'Reilly)
  2. Gleichzeitige Programmierung in Java, 2. Auflage, Doug Lea (Addison-Wesley)
  3. Zähmung von Java-Threads, Allen Holub (Apress)
  4. Java-Thread-Programmierung, Paul Hyde (Sams)
  5. Multithread-Programmierung mit Java-Technologie, Bil Lewis und Daniel Berg (Prentice Hall, Sun Press)
  6. Hochleistungs-Java-Plattform-Computing: Multithread- und Netzwerkprogrammierung, Thomas Christopher und George Thiruvathukal (Prentice Hall, Sun Press)

Die folgende Tabelle gibt einen kurzen Überblick über die Hauptmerkmale der sechs Bücher.

Alle Bücher basieren auf der Version 1.2.x der Java 2-Plattform.
Themen Bücher Übersicht
  Java-Threads Gleichzeitige Programmierung Java-Threads zähmen Java-Thread-Programmierung Multithread-Programmierung Hochleistungs-Java
Preis 2,95 9,95 4,95 4,99 9,99 9,99
Alle Seiten 320 410 300 510 460 410
CD-ROM / Quelle aus dem Web Nein Ja Nein Ja Nein Ja Nein Ja Nein Ja Nein Ja
Thread-Grundlagen Ausgezeichnet Messe Keiner Ausgezeichnet Ausgezeichnet Messe
Techniken Sehr gut Gut Sehr gut Ausgezeichnet Gut Sehr gut
Designmuster Keiner Ausgezeichnet Arm Keiner Keiner Gut
Skala: Keine, schlecht, durchschnittlich, gut, sehr gut, ausgezeichnet

Die Tabelle sollte bis zum CD-ROM-Attribut ziemlich selbsterklärend sein. Lassen Sie mich die letzten Zeilen näher erläutern:

  • Das Thema Basics Attribut gibt das Ausmaß , in dem die Bücher beschreiben , was ein Thread ist und wie man es benutzt: Beschreibung der ThreadKlasse und RunnableSchnittstelle, die ObjectMethoden der wait(), notify()und notifyAll(), und das synchronizedSchlüsselwort.
  • Das Attribut "Techniken" bewertet, wie gut die Bücher Techniken zur Verwendung von Threads untersuchen.
  • Das Attribut "Entwurfsmuster" misst die Erklärung der Bücher zum Erstellen einer threadbasierten Programmierung nach genau definierten Entwurfsmustern.

Als nächstes werde ich jedes Buch überprüfen. Neben dem Titel jedes Buches befindet sich eine Sternebewertung, die auf dem Bereich der Thread-Abdeckung basiert, auf den sich das Buch zu konzentrieren behauptet, und nicht nur auf dem Durchschnitt der drei oben aufgeführten Attribute. Ein Stern zeigt einen schlechten Job an; Die höchste Bewertung (fünf Sterne) kennzeichnet eine außergewöhnliche Abdeckung.

Java-Threads

Die erste Ausgabe von Java Threads von Scott Oaks und Henry Wong war die ursprüngliche endgültige Ressource für das Erlernen des Programmierens mit Threads. Während in den meisten Einführungsbüchern erläutert wurde, was ein Thread ist und wie die ThreadKlasse mit der RunnableSchnittstelle verwendet wird, lieferten Java-Threads die zusätzlichen Informationen, die für eine effektive Verwendung erforderlich sind. Die zweite Ausgabe tritt in ihre Fußstapfen: Sie enthält aktualisierte Informationen zur Verwendung von Threads mit der Java 2-Plattform, Informationen zu den veralteten APIs, zur Unterbrechung der E / A und zu den Java 2-Sicherheitsänderungen. Das Buch behandelt auch Multithreading-Probleme mit dem Swing-Komponentensatz und bietet Hilfe bei der nativen Planungsunterstützung und beim Arbeiten mit Multiprozessor-Computern.

Wenn Sie mit Java-Programmierung noch nicht vertraut sind und noch keine Threads erobern müssen, ist Java Threads eine hervorragende Ressource. Sie erhalten einen Einblick in die Grundlagen des Java-Threading und lernen die Techniken kennen, die erforderlich sind, damit Ihre Programme in einer Multithread-Welt ordnungsgemäß funktionieren.

Gleichzeitige Programmierung in Java

Während Java Threads die Details der Verwendung der Threads-API auf niedriger Ebene erläutert, untersucht die gleichzeitige Programmierung in Java von Doug Lea das ordnungsgemäße Design von Multithread-Programmen. In der Java-Welt ist es nicht ausreichend zu wissen, wie die API verwendet wird. Sie sollten auch Zeit und Energie investieren, um Ihr Programm richtig zu gestalten. In diesem Sinne ist Concurrent Programming hauptsächlich ein Buch mit Entwurfsmustern. Bei einem bestimmten Problem können Sie das im Buch definierte Muster nachschlagen, und Ihr Programm schreibt sich praktisch von selbst.

Die gleichzeitige Programmierung ist in vier Bereiche unterteilt, die unterschiedliche Verwendungsmuster beschreiben. Der Abschnitt "Concurrent Object-Oriented Programming" beginnt mit den Grundlagen. Der Abschnitt "Ausschluss" beschreibt Muster für die Verwendung des synchronizedSchlüsselworts. „State - Abhängigkeit“ untersucht Probleme mit und Muster für die Verwendung der wait(), notify()und notifyAll()Methoden der ObjectKlasse. Der letzte Abschnitt, "Erstellen von Threads", befasst sich mit Mustern für die Verwendung der ThreadKlasse.

Dieses Buch richtet sich definitiv an fortgeschrittene Benutzer und ist nichts für schwache Nerven. Es wird erwartet, dass Sie die objektorientierte Programmierung und die Programmiersprache Java gut verstehen und nur im Bereich des Entwurfs von Programmen für Parallelitätsprobleme fehlen. Zusätzlich zum Buch stellt Lea die Bibliothek util.concurrent auf der Website des Buches frei zur Verfügung. (Einen Link finden Sie unter Ressourcen.) Die Bibliothek hilft Ihnen beim Entwerfen und Entwickeln von Multithread-Programmen.

Java-Threads zähmen

Allen Holubs Taming Java Threads entstand hier bei JavaWorld als neunteilige Java Toolbox-Serie. Die Artikel wurden inzwischen aktualisiert und bilden nun den Inhalt des Buches sowie ein interessantes neues Kapitel, in dem die Probleme mit der Threading-API von Java beschrieben werden. (Einen Link zu diesem Abschnitt mit dem Titel "Wenn ich König wäre" finden Sie unter Ressourcen.) Die Zähmung unterscheidet sich von den ersten beiden Büchern, die ich besprochen habe. Es geht ausschließlich um Techniken zur ordnungsgemäßen Verwendung der API. Es ist keine Einführung in Themen oder ein Designmusterbuch. Eine Codebibliothek (siehe Ressourcen für einen Link) ist ebenfalls verfügbar, damit Sie das Gelernte nutzen können. Lesen Sie jedoch unbedingt die Lizenzvereinbarung. Es ist nicht gemeinfrei oder Open Source.

Nachdem Holub die grundlegende Architektur des Java-Multithreading-Modells beschrieben hat, erklärt er die Gefahren der Verwendung von Threads und Techniken für deren sichere Verwendung. Sie lernen, Mutexe, Semaphoren und bedingte Variablen zu erstellen und zu verwenden. Sie werden mit den Unterschieden zwischen Swings invokeLater()und invokeAndWait()Methoden vertraut . Holub untersucht die AWTEventMulticasterKlasse auch und zeigt, wie sie threadsicher bei minimalem Overhead ist und wie Sie mit Thread-Pools arbeiten können. Nachdem alles gesagt und getan ist, haben Sie einen hervorragenden Überblick über die Einschränkungen und die Verwendung des Java-Threading-Modells.

Ich war überrascht, einige technische Fehler im Buch zu sehen - nicht weniger im Vorwort -, aber es hat die hervorragenden Informationen, die das Buch bietet, nicht beeinträchtigt. Nachdem ich jedoch ständig Java-Code mit gemischter Groß- und Kleinschreibung formatiert sah, war ich ein wenig überrascht, dass Holubs Code mit dem Unterstrich zwischen Wörtern in Variablen und Methodennamen formatiert wurde. Möglicherweise müssen Sie die Codeblöcke mehrmals lesen, bevor Sie sie vollständig verstehen. Die Qualität der hier bereitgestellten Informationen ist jedoch die Unannehmlichkeit wert. Ein letzter Hinweis: Der gesamte Quellcode ist vollständig von Javadoc kommentiert.

Java-Thread-Programmierung

Die Java-Thread-Programmierung von Paul Hyde konkurriert direkt mit Java-Threads. Es richtet sich eindeutig an den unerfahrenen Entwickler und enthält zusätzliche Informationen zu fortgeschritteneren Themen und Techniken, wenn dieser Entwickler "erwachsen" wird. Dieses Buch ist das größte der ganzen Reihe, und der Raum wird gut genutzt.

In der ersten Hälfte der Java-Thread-Programmierung wird erklärt, was Threads sind und wie mit den Grundlagen gearbeitet wird. Sie erhalten die typische Beschreibung zum Erstellen von Threads und Verwenden der RunnableBenutzeroberfläche. Es gibt ein Kapitel darüber, wie Sie Threads stoppen und wie Sie sie anhalten und fortsetzen können, ohne die veralteten Methoden zu verwenden - nette Techniken zur Steigerung der Produktivität. Zusätzlich zu wait()und notify()beschreibt Hyde ausführlich die volatileSchlüsselwort- und Interthread-Kommunikation über E / A-Pipes. Java Thread - Programmierung hat auch die beste Abdeckung der ThreadLocalund InheritableThreadLocalKlassen, zusätzlich zu der üblichen Berichterstattung über Themen und in anderen Büchern gefunden Schaukel.

Teil 2 der Java-Thread-Programmierung beschreibt Techniken zum Arbeiten mit Java-Threads. Es bietet die beste Thread-Pooling-Abdeckung und ein großartiges Kapitel zum Ausbruch blockierter E / A. Sie werden von dieser Auswahl nicht enttäuscht sein.

Multithread-Programmierung mit Java-Technologie

Ich finde immer mindestens ein Buch, das den anderen nicht ganz ähnlich ist - Multithread-Programmierung mit Java-Technologie von Bil Lewis und Daniel Berg ist so ein Biest. Ich habe es immer noch mit einem Stern bewertet, aber dieses Buch verdient besondere Erwähnung. Meiner Meinung nach Multithread-Programmierung 'Der Hauptzweck besteht nicht darin, Ihnen das Programmieren mit Threads in Java beizubringen. Es wird Ihnen in diesem Bereich helfen, aber sein Hauptzweck scheint darin zu bestehen, Ihnen die Funktionsweise der zugrunde liegenden Thread-Architektur sowohl innerhalb der Java Virtual Machine (Java VM) als auch der zugrunde liegenden Betriebssysteme beizubringen. Tatsächlich erhalten Sie nicht nur viele Codebeispiele des Buches in Java-Code, sondern auch POSIX-Code und Code für die Win32-API-Thread-Behandlung. Wenn es am Ende jedes Kapitels Leserübungen gäbe, würde dies gut als College-Text funktionieren.

Wie gut bringt Ihnen die Multithread-Programmierung den Umgang mit Threads bei? Es ähnelt am ehesten Java-Threads . Das Hauptziel ist es, Ihnen beizubringen, was ein Thread ist und wie man ihn verwendet. Es zeigt auch, wie alles unter der Haube in der Java-VM funktioniert, wie alles in der Java-VM geplant ist und so weiter. Darüber hinaus erhalten Sie Informationen zu typischen Threading-Themen wie Synchronisation, Deadlocks und Rennbedingungen. Lewis und Berg behandeln sogar Thread-Probleme mit RMI und Optimierungstechniken, um die Leistung zu verbessern. Alles in allem ist dies ein gutes Buch - nur keine typische Darstellung von Java-Threads.

Achten Sie bei den Beispielen des Buches darauf, dass Elvis von den UFOs erwischt wird.

Hochleistungs-Java-Plattform-Computing

Das Einchecken mit dem längsten Titel ist High Performance Java Platform Computing: Multithread- und Netzwerkprogrammierung von Thomas Christopher und George Thiruvathukal. Sogar die Nachnamen der Autoren sind mindestens doppelt so lang wie die ihrer Konkurrenten! Der Überschuss hört hier nicht auf; Dieses Buch kostet auch über 25 Prozent mehr als die anderen.

Genug von außen - was ist drinnen? High Performance springt direkt in eine Diskussion über paralleles Rechnen ein. In Kapitel 1 erfahren Sie mehr über die von Neumann-Maschine, die Taxonomie von Flynn, die lineare Beschleunigung und das Amdahl-Gesetz. In Kapitel 2 wird die Thread-Erstellung ausführlicher behandelt als in den meisten Einführungen in die API. Nach einer Demonstration der Rennbedingungen wird in Kapitel 3 die Synchronisierung erläutert und erläutert, warum Sie sie benötigen. Kapitel 4 befasst sich eingehend mit Monitoren mit vielen Variationen der Probleme beim Sperren von Lesern und Schreibern. In Kapitel 5 diskutieren die Autoren die Verwendung von gemeinsam genutztem Speicher - auf dem Heap, nicht auf der Unix-Systemvariante -, um einen Thread-Pool zu haben. Der Rest des Buches behandelt Muster für die Entwicklung von Anwendungen für die parallele Ausführung.

Es gibt hier viele gute Informationen zum parallelen Rechnen, aber das Ziel von High Performance ist nicht wirklich, die allgemeine Thread-Programmierung zu lehren. Es scheint hauptsächlich als Text für einen Parallel-Computing-Kurs entwickelt worden zu sein - jedes Kapitel endet mit einer Reihe von nachdenklichen Übungen, auf die ich keine Antworten gefunden habe.

Empfehle ich das immer wieder?

Die ersten Ausgaben von Concurrent Programming in Java und Java Threads wurden 1997 veröffentlicht und waren sehr zu empfehlen. Empfehle ich nur blind ihre zweite Ausgabe? Kurz gesagt, es scheint, dass Leas Concurrent Programming immer noch eine hervorragende Ressource für diejenigen ist, die lernen, Programme für die Multithread-Welt zu entwerfen. Es ist nicht leicht zu lesen, aber die im Buch erläuterten Entwurfsmuster und -techniken sind hervorragende Werkzeuge für ernsthafte Java-Entwickler.

Auf der anderen Seite scheint es, dass Java Threads von Sams Java Thread Programming als das beste Buch für Anfänger abgelöst wurde. Mit dem O'Reilly-Angebot ist technisch nichts falsch, aber die Java-Thread-Programmierung eignet sich besser als Einführung in Java-Threads. Hyde geht sogar über das Einführungsmaterial hinaus und bietet fortgeschrittenere Techniken für ein Extra.

Wenn Sie die ersten Editionen von Java Threads und Concurrent Programming in Java haben, sind die Updates einen Besuch wert? Ich könnte empfehlen, Leas zweite Ausgabe zu bekommen und Java-Threads weiterzugeben. Wenn Sie die erste Ausgabe von Java Threads haben, haben Sie wahrscheinlich inzwischen keine zweite mehr benötigt. Wenn Sie noch einen Einführungstext benötigen, greifen Sie stattdessen zu Sams Java-Thread-Programmierung .

Was tun mit dem Rest? Es ist wirklich ein harter Anruf und hängt davon ab, wessen Cent Sie ausgeben. Wenn ich nur noch ein Thread-Buch bekommen könnte, würde ich Multithread-Programmierung mit Java-Technologie wählen . Die Thread-Abdeckung ist einzigartig und nützlich genug, um eine schöne Ergänzung zu einer Bibliothek zu sein. Holubs Taming Java Threads enthält einige nützliche Techniken, um die Thread-Programmierung optimal zu nutzen. Ich bin mir jedoch nicht sicher, ob es sich um eine notwendige Ressource handelt. Hochleistungs-Java-Plattform-Computing scheint für diejenigen geeignet zu sein, die sich für die Parallel-Computing-Welt interessieren. Sonst würde ich es im Regal lassen.

John Zukowski ist ein unabhängiger Java-Berater, Autor des Definitive Guide to Swing für Java 2, der Second Edition von Apress, des Mastering Java 2 von Sybex und der Java AWT Reference von O'Reilly sowie des About's Focus on Java-Handbuchs.