Kurz erklärt
Eine Race Condition entsteht, wenn das Ergebnis eines Programms davon abhängt, in welcher zeitlichen Reihenfolge mehrere Threads auf gemeinsame Daten zugreifen.
Genauer
Der Fehler tritt unregelmäßig auf und lässt sich schwer reproduzieren, weil die Reihenfolge von Zufälligkeiten des Schedulers abhängt. Klassisches Beispiel: zwei Threads erhöhen denselben Zähler. zaehler += 1 besteht aus Lesen, Addieren und Schreiben – wechselt der Thread dazwischen, geht eine Erhöhung verloren.