© DrHitch/Shutterstock.com
Das Java Memory Model

3 Einführung in das Java Concurrency Stress tests Tool


Das Testen der Nebenläufigkeit war noch nie eine einfache Aufgabe in Java. In diesem Kapitel 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.

In Kapitel 1 haben wir das Codebeispiel in Listing 3.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 Kapitel. 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.

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);
}
}

Listing 3.1: Quizfrage

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 [1]. 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 [2]. Einige Tests sind aber auch mit JDK 8+ lauffähig. Eine detaillierte Installationsanleitung ist ebenfalls unter [1] zu finden. Damit die Tests realistisch sind, sollte der ausführende Rechner mehr als zwei Prozessoren besitzen oder einen Prozessor mit mehr als einem Kern. Mehrere Worker Threads führen den Test n...

Neugierig geworden?

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