Softwarekonferenz für parallele
und hochperformante Programmierung
Heidelberg, Print Media Academy, 19.–22. Februar 2019

// Multi-Threading mit Java, oder wie programmiere ich Deadlocks

Eine Anwendung mit einem Thread zu schreiben, ist einfach. Schnell versagen jedoch vertraute Muster, wenn mehrere Threads zum Einsatz kommen. In diesem Vortrag schauen wir uns diverse Fallstricke an, die in einer Single-Threaded-Umgebung häufig und gern verwendet werden, in einer Multi-Threaded-Anwendung jedoch zu bösen Überraschungen führen können:

* Wie nicht volatile Variablen zu falschen Werten führen können,
* wie zu viel Synchronisierung die Anwendung blockieren kann,
* wie mehrere Threads die Anwendung verlangsamen, statt zu beschleunigen.

Wir lernen, warum Synchronisierung auf Nicht-Final-Objekten eigentlich gar keine Synchronisierung ist und warum unsynchronisierter Zugriff auf eine synchronisierte Map eine "böse" Idee ist. Alle Fallstricke schauen wir uns am Beispiel von einfachem Code (Java Core only) und stellen Lösungen für diese Probleme vor.

Vorkenntnisse
* Gute Kenntnisse an Java
* Wünschenswert auch allgemeine Kenntnisse über Computer (Speicher, CPU und Register)

Lernziele
Die Teilnehmer bekommen ein Verständnis dafür, wie sich Java in einer Multithreading-Umgebung verhält und warum dort Laufzeitprobleme entstehen, die auf dem Rechner des Entwicklers nie passiert sind.


// Daniel Ludwig Daniel Ludwig

programmiert seit fast 20 Jahren in Java. Viele Jahre als Freiberufler für DAX-Konzerne lehrten ihn schnell alle Fallstricke schneller und skalierbarer Programmierung. Seit Jahren tätig für die Deutsche Börse AG, erst als Freiberufler dann als Angestellter, beschäftigt er sich mit hochperformanten und skalierbaren Applikationen in einer Welt, in der Millisekunden zu viel sind.