© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 3: Einführung in das Java Concurrency Stress tests Tool

Mach keinen Stress


Das Testen der Nebenläufigkeit war noch nie eine einfache Aufgabe in Java. In diesem Artikel stellen wir das Concurrency Stress tests Tool jcstress vor. Dessen Ziel ist es zu überprüfen, ob die Nebenläufigkeit in Java-Klassenbibliotheken korrekt umgesetzt wird. Anhand von praktischen Beispielen veranschaulichen wir, wie wir typische­ ­Nebenläufigkeitsprobleme wie Reordering und Unsafe Publication mithilfe von jcstress-Tests identifizieren und entsprechende Fixes testen können.

Artikelserie

Teil 1: Hardware-Memory-Modelle reloaded

Teil 2: Problemkategorien im Java Memory Model

Teil 3: Einführung in das Java Concurrency Stress tests Tool

Teil 4: Die Zukunft des Java Memory Models

In Teil 1 unserer Artikelserie [1] haben wir den Lesern das Codebeispiel in Listing 1 vorgestellt. Es wurde dabei die folgende Frage gestellt: Wenn in der Ausgabe der Methode executeOnCPU2 y=1 erscheint, welche Werte von x können in der gleichen Zeile ausgegeben werden? Die Werte x=2 und x=3 sind naheliegend als zu erwartendes Ergebnis. Aber sind auch die Werte x=0 oder x=1 möglich? Wir ergänzen die Fragestellung mit dem Zusatz, dass dieses Programm auf einem x86-Prozessor läuft, wie alle anderen Beispiele in diesem Artikel. Die x86-Prozessorfamilie basiert auf einer Hardwarearchitektur, sodass der Prozess alleine kein Reordering durchführt [1]. Aus diesem Grund sollten die Werte x=0 oder x=1 nicht möglich sein.

Listing 1: Quizfrage

public class MyClass { int x, y; public void executeOnCPU1() { x = 1; x = 2; y = 1; x = 3; } public void executeOnCPU2() { System.out.println("x: " + x + " y: " + y); } }

Es stellt sich die Frage, wie wir durch Testen unsere Hypothese bestätigen oder widerlegen können. Um zu überprüfen, ob die Nebenläufigkeit in Java-Anwendungen korrekt durchgeführt wird, wurde das OpenJDK-Tool Java Concurrency Stress tests (jcstress) entwickelt [2]. jcstress existiert seit rund vier Jahren und wird ständig weiterentwickelt. Jedoch befindet es sich immer noch in einem experimentellen Stadium. Das heißt, dass die gefundenen Probleme von den Entwicklern nach tatsächlichen Fehlern noch tiefer analysiert werden müssen.

Mit dem jcstress-Tool starten

Für die Installation von jcstress benötigt man Maven und Mercurial. Um die Tests zu kompilieren, benötigt man JDK 9+. Das liegt daran, dass das Tool unter anderem von der Methode Thread.onSpinWait Gebrauch macht, die erst in JDK 9 dazu gekommen ist [3]. Einige Tests sind aber auch mit JDK 8+ lauffähig. Eine detaillierte Instal...

Java Magazin
Teil 3: Einführung in das Java Concurrency Stress tests Tool

Mach keinen Stress

Das Testen der Nebenläufigkeit war noch nie eine einfache Aufgabe in Java. In diesem Artikel stellen wir das Concurrency Stress tests Tool jcstress vor. Dessen Ziel ist es zu überprüfen, ob die Nebenläufigkeit in Java-Klassenbibliotheken korrekt umgesetzt wird. Anhand von praktischen Beispielen veranschaulichen wir, wie wir typische Nebenläufigkeitsprobleme wie Reordering und Unsafe Publication mithilfe von jcstress-Tests identifizieren und entsprechende Fixes testen können.

Rodion Alukhanov, Vadym Kazulkin


Das Testen der Nebenläufigkeit war noch nie eine einfache Aufgabe in Java. In diesem Artikel stellen wir das Concurrency Stress tests Tool jcstress vor. Dessen Ziel ist es zu überprüfen, ob die Nebenläufigkeit in Java-Klassenbibliotheken korrekt umgesetzt wird. Anhand von praktischen Beispielen veranschaulichen wir, wie wir typische­ ­Nebenläufigkeitsprobleme wie Reordering und Unsafe Publication mithilfe von jcstress-Tests identifizieren und entsprechende Fixes testen können.

Artikelserie

Teil 1: Hardware-Memory-Modelle reloaded

Teil 2: Problemkategorien im Java Memory Model

Teil 3: Einführung in das Java Concurrency Stress tests Tool

Teil 4: Die Zukunft des Java Memory Models

In Teil 1 unserer Artikelserie [1] haben wir den Lesern das Codebeispiel in Listing 1 vorgestellt. Es wurde dabei die folgende Frage gestellt: Wenn in der Ausgabe der Methode executeOnCPU2 y=1 erscheint, welche Werte von x können in der gleichen Zeile ausgegeben werden? Die Werte x=2 und x=3 sind naheliegend als zu erwartendes Ergebnis. Aber sind auch die Werte x=0 oder x=1 möglich? Wir ergänzen die Fragestellung mit dem Zusatz, dass dieses Programm auf einem x86-Prozessor läuft, wie alle anderen Beispiele in diesem Artikel. Die x86-Prozessorfamilie basiert auf einer Hardwarearchitektur, sodass der Prozess alleine kein Reordering durchführt [1]. Aus diesem Grund sollten die Werte x=0 oder x=1 nicht möglich sein.

Listing 1: Quizfrage

public class MyClass { int x, y; public void executeOnCPU1() { x = 1; x = 2; y = 1; x = 3; } public void executeOnCPU2() { System.out.println("x: " + x + " y: " + y); } }

Es stellt sich die Frage, wie wir durch Testen unsere Hypothese bestätigen oder widerlegen können. Um zu überprüfen, ob die Nebenläufigkeit in Java-Anwendungen korrekt durchgeführt wird, wurde das OpenJDK-Tool Java Concurrency Stress tests (jcstress) entwickelt [2]. jcstress existiert seit rund vier Jahren und wird ständig weiterentwickelt. Jedoch befindet es sich immer noch in einem experimentellen Stadium. Das heißt, dass die gefundenen Probleme von den Entwicklern nach tatsächlichen Fehlern noch tiefer analysiert werden müssen.

Mit dem jcstress-Tool starten

Für die Installation von jcstress benötigt man Maven und Mercurial. Um die Tests zu kompilieren, benötigt man JDK 9+. Das liegt daran, dass das Tool unter anderem von der Methode Thread.onSpinWait Gebrauch macht, die erst in JDK 9 dazu gekommen ist [3]. Einige Tests sind aber auch mit JDK 8+ lauffähig. Eine detaillierte Instal...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang