Ein "Hardware-Thread" ist eine physische CPU oder ein Kern. Eine 4-Kern-CPU kann also wirklich 4 Hardware-Threads gleichzeitig unterstützen - die CPU erledigt wirklich 4 Dinge gleichzeitig.
Ein Hardware-Thread kann viele Software-Threads ausführen. In modernen Betriebssystemen erfolgt dies häufig durch Time-Slicing. Jeder Thread muss einige Millisekunden ausgeführt werden, bevor das Betriebssystem einen anderen Thread für die Ausführung auf dieser CPU plant. Da das Betriebssystem schnell zwischen den Threads hin und her wechselt, sieht es so aus, als ob eine CPU mehr als eine Sache gleichzeitig ausführt. In Wirklichkeit führt ein Kern jedoch immer noch nur einen Hardware-Thread aus, der zwischen vielen Software-Threads wechselt.
Moderne JVMs ordnen Java-Threads direkt den vom Betriebssystem bereitgestellten nativen Threads zu, sodass Java-Threads keinen inhärenten Overhead gegenüber nativen Threads verursachen. Bei Hardware-Threads versucht das Betriebssystem, Threads Kernen zuzuordnen, wenn genügend Kerne vorhanden sind. Wenn Sie also ein Java-Programm haben, das 4 Threads startet und 4 oder mehr Kerne hat, besteht eine gute Chance, dass Ihre 4 Threads wirklich parallel auf 4 separaten Kernen ausgeführt werden, wenn die Kerne inaktiv sind.