Kurz erklärt
Nebenläufige Ausführungsstränge innerhalb eines Java-Programms — erlauben, dass mehrere Aufgaben scheinbar gleichzeitig laufen, statt streng nacheinander.
Genauer
Ein neuer Thread startet entweder über eine eigene Thread-Unterklasse oder, gebräuchlicher, über das Runnable-Interface mit new Thread(runnable).start(). Greifen mehrere Threads gleichzeitig auf denselben veränderlichen Zustand zu, drohen Race Conditions — das synchronized-Schlüsselwort schützt kritische Codeabschnitte davor.