Ist das Buch „Java Concurrency in Practice“ in den Tagen von Java 8 und 11 relevant?

Hallo Kollegen!

Der Artikel, dessen Übersetzung wir heute anbieten, erinnert erneut an die Bedeutung des zeitlosen Buches " Java Concurrency in Practice ", das von Brian Goetz verfasst wurde.


Die Daten der Kommentare zu diesem Artikel im Original deuten darauf hin, dass der Autor ihn nicht zum ersten Mal aktualisiert und erneut veröffentlicht. Daher haben wir uns auch erlaubt, den Link zu dem Buch zu aktualisieren, das in dem Artikel von Raul-Gabriel Urm, Mario Fusco und Alan Mycroft erwähnt wurde, der von Manning unter dem Titel Java 8 in Action veröffentlicht wurde. Wir bereiten eine Übersetzung einer neuen Ausgabe namens Modern Java vor. Aber lassen Sie uns jetzt über die Klassiker sprechen. Sie sind zur Katze eingeladen.


Ein Leser mit dem Spitznamen Shobhit stellte mir diese Frage in den Kommentaren zu einem Artikel über 12 fortgeschrittene Java-Bücher für mittelschwere Programmierer - Teil 1 . Die Frage ist wirklich gut, und ich denke, viele Java-Programmierer hatten ähnliche Zweifel, als in unserer Zeit jemand empfahl, Java Concurrency in der Praxis zu lesen. Als dieses Buch 2006 zum ersten Mal veröffentlicht wurde, konnte die gesamte Java-Welt die in Java 1.5 erzielten Innovationen im Bereich des Wettbewerbs noch nicht herausfinden. Ich denke, dann wurde der erste ernsthafte Versuch unternommen, Javas integrierte Unterstützung für Multithreading und Wettbewerbsfähigkeit zu verbessern. Dann ahnten viele Programmierer nicht einmal die neuen Tools, die in der API erschienen, zum Beispiel CountDownLatch , CyclicBarrier , ConcurrentHashMap und viele andere. Das Buch diente ihnen als debuggte Einführung in die Arbeit mit diesen Tools und erläuterte, wie sie zum Schreiben von leistungsstarken, wettbewerbsfähigen Java-Anwendungen verwendet werden können.

Dies ist genau die allgemeine Idee dieses Buches, und in diesem Sinne werden es Ihnen viele Entwickler beschreiben, wenn Sie fragen: "Wie gefällt Ihnen" Java Concurrency in Practice "?" Ich nehme dieses Buch jedoch etwas anders und empfehle es daher immer noch allen Neulingen, die mit Java vertraut sind, oder mittelständischen Entwicklern , die wettbewerbsbezogene Konzepte erlernen möchten.

Das wichtigste Material, das Sie in diesem Buch kennenlernen werden, sind klare Konzepte und Grundlagen der Wettbewerbsprogrammierung, insbesondere Sichtbarkeit, Reihenfolge, Thread-Sicherheit , Unveränderlichkeit , Parallelität usw.

Sie erklärt auch, warum in den meisten Fällen wettbewerbsfähige Java-Anwendungen falsch geschrieben werden und warum Java-Programmierer häufig Fehler machen, die zu Multithreading-Problemen führen, einschließlich Rennbedingungen, Deadlock, aktivem Blockieren, Speicherstörungen und einfach falschen Berechnungen.

Das Buch verwendet Emoticons, die der Beschreibung "Wie man es falsch macht" beigefügt sind, bevor der Leser mit der richtigen und qualitativ hochwertigen Lösung des Problems vertraut gemacht wird. Das Buch hilft also nicht nur, mit den Missverständnissen vieler Java-Entwickler umzugehen, sondern vermittelt der Java-Community auch die richtigen Informationen zum Umgang mit Multithreading und Wettbewerb.

Es besteht kein Zweifel, dass Multithreading und Wettbewerb komplex sind. Sie sind nicht einfach korrekt in Code zu implementieren, ebenso schwer zu verstehen und zu erklären. Ich kenne viele Programmierer, die einfach nicht in der Lage sind, visuell darzustellen, wie verschiedene Threads mit demselben Codeelement interagieren und mit unterschiedlichen Daten arbeiten.

Wie im klassischen Rekursionsbeispiel ist Multithreading für einige Programmierer sehr einfach zu üben, während für andere Multithreading in einem Anwendungsszenario schwer zu verstehen und anzuwenden ist.

Der größte Beitrag des Java-Buches Concurrency in Practice zur Entwicklung der Java-Welt besteht nicht darin, den Wettbewerb zu vereinfachen, sondern echte und genaue Informationen darüber bereitzustellen, die fehlten. Seitdem habe ich viele Interviews geführt und ich weiß, dass Programmierer sich das Flow-Gerät und seine Funktionsweise immer nicht genau vorstellen.

Viele Programmierer, die es sogar geschafft haben, 4-5 Jahre mit Java zu arbeiten, verstehen nicht, wie flüchtige Variablen angeordnet sind . Sie wissen lediglich, dass Sie bei der Arbeit mit einer veränderlichen Variablen bei jedem Vergleich überprüfen müssen, welcher Wert sich im Hauptspeicher befindet. Dies ist wahr, aber nur ein Teil der Wahrheit.

Sie erfuhren nichts über das Java-Speichermodell, darüber, wie eine variable Variable die Reihenfolge des Codes und die Ausführung von Rechenanweisungen im Kern beeinflussen kann. Es geht darum, die dynamische Kompilierung ( JIT ) und die Java Virtual Machine ( JVM ) zur Optimierung zu verwenden. Eine solche Optimierung kann zu subtilen logischen Fehlern führen.

Den Leuten wird nicht gesagt, wie veränderbare Variablen es Ihnen ermöglichen, zu sehen, was in einem Thread getan wurde, bevor Sie von einem anderen Thread usw. auf eine Variable zugreifen. Nicht jeder weiß, was eine Speicherbarriere ist und wie sie sich auf die Sichtbarkeit auswirkt.

Aus dem Buch Java Concurrency in Practice haben viele Java-Programmierer all diese Konzepte untersucht. Ich muss zugeben, dass ich mich, bis ich es gelesen habe, in vielerlei Hinsicht in vielen wichtigen Fragen des Multithreading und des Wettbewerbs geirrt habe, insbesondere in der Reihenfolge, Sichtbarkeit und impliziten Auswirkungen der endgültigen Variablen und der sicheren Veröffentlichung. Das Buch hat mir geholfen, das herauszufinden.

Übrigens, wenn Ihnen einige Abschnitte des Buches ein wenig unverständlich erscheinen - glauben Sie mir, nicht nur Ihnen. Hier danken wir Dr. Heinz Kabutz, der das Material des Buches in seinem Kurs Java Concurrency in Practice Bundle in vereinfachter Form skizziert hat.



Auch wenn Ihnen dieses Material zu kompliziert erscheint, hat Heinz einen anderen Kurs, Mastering Threads , der Ihnen hilft, Multithreading für jeden durchschnittlichen Java-Programmierer zu verstehen.

Lassen Sie uns nun über Java 8 sprechen, das heißt, was sich von Java 1.5 auf Java 8 geändert hat. Im JDK wurden viele neue Tools veröffentlicht, um die Wettbewerbsfähigkeit einzuführen und wettbewerbsfähigere Java-Anwendungen zu entwickeln. Der Fork-Join-Pool wurde in JDK 7 und CompleteableFutures in Java 8 angezeigt. Es ist viel wichtiger, dass ab Java 8 ein neuer, funktionalerer Programmierstil mit Lambda-Ausdrücken festgelegt wurde.

Wir haben auch Streams und parallele Streams, mit denen Entwickler die Wettbewerbsfähigkeit nutzen können, ohne sie zu programmieren. Die ganze Idee, die Implementierung des Wettbewerbs von Anwendungsentwicklern zu übernehmen und an die Entwickler der API zu delegieren, vereinfacht die Situation mit dem Wettbewerb in Java geringfügig und verringert das Risiko seiner Implementierung.

Dies bedeutet auch, dass Sie in Java Massenoperationen in mehreren Threads mit nur wenigen Methoden ausführen können, ohne eine einzige Codezeile zu schreiben, die sich auf Threads, das synchronisierte Schlüsselwort oder Methoden zum Warten und Benachrichtigen bezieht.

Zweifellos muss jeder Java-Entwickler diese neuen Tools erlernen, um mit der Entwicklung der Technologie Schritt zu halten - was natürlich einem Buch wie Modern Java In Action helfen wird. Es führt Sie nicht nur in alle Innovationen der Java-Sprache ein, sondern hilft Ihnen auch dabei, zu lernen, wie man sie in alltäglichen Aufgaben verwendet, die Motivation für diese Innovationen zu verstehen und sich einen Überblick über die moderne Java-Sprache zu verschaffen.



Obwohl das Buch Java Concurrency in Practice in seiner aktuellen Form nicht alle diese wichtigen Konzepte und Tools abdeckt, bleibt es dennoch von unschätzbarem Wert, um die Hauptmerkmale der Java-Sprache in Bezug auf Threads , Wettbewerb und Multithreading zu untersuchen .

Götz 'Buch ist immer noch ein Muss für jeden Java-Entwickler, der Multithreading und Wettbewerbsfähigkeit lernen und beherrschen möchte - die größten Stärken von Java in der Anwendungsentwicklung.

Basierend auf dem Vorstehenden möchte ich, wie viele Java-Entwickler auf der ganzen Welt, die aktualisierte Ausgabe von Java Concurrency in Practice sehen, die die Tools und Methoden berücksichtigt, die in Java 6, 7, 8, 9, 10 und vielleicht sogar erschienen sind in Java 11. Immerhin sind aktualisierte Versionen von Effective Java und Head First-Entwurfsmustern erschienen , die Java 8 abdecken und zeigen, wie viel einfacher es ist, verschiedene Muster mit den neuen Funktionen von Java 8 zu implementieren.

Source: https://habr.com/ru/post/de451322/


All Articles