Die falsche Assuption ist
Wenn nur ein Prozessor vorhanden ist, dann wird Fäden nacheinander ausgeführt werden.
Wie Threads ausgeführt werden, hängt von der Laufzeitumgebung ab. Mit Java gibt es einige Definitionen, dass bestimmte Teile Ihres Codes keine Synchronisation mit anderen Threads verursachen und somit keine (potenzielle) Neuterminierung von Threads verursachen.
Im Allgemeinen wird das Betriebssystem für die Planung von Ausführungseinheiten zuständig sein. Früher waren solche Entitäten meist Prozesse. Jetzt kann es von Prozessen und Threads (einige planen nur auf Thread-Ebene). Der Einfachheit halber lassen wir uns nur mit Threads beschäftigen.
Das Betriebssystem kann dann einem Thread erlauben zu laufen, bis es einen Punkt erreicht, an dem es nicht fortfahren kann, z. warten, bis eine E/A-Operation abgeschlossen ist. Dies ist gut für den Thread, da es CPU für max. Dies ist schlecht für alle anderen Threads, die selbst einige CPU-Zyklen erhalten möchten. (Im Allgemeinen wird es immer mehr Threads als verfügbare CPUs geben. So ist das Problem unabhängig von der Anzahl der CPUs.) Um das interaktive Verhalten zu verbessern, könnte ein OS Zeitscheiben verwenden, die es einem Thread erlauben, für eine bestimmte Zeit zu laufen. Nach Ablauf der Zeitscheibe wird der Thread zwangsweise aus der CPU entfernt und das OS wählt einen neuen Thread zum Ausführen aus (könnte sogar der gerade unterbrochene sein).
Dadurch kann jeder Thread einige Fortschritte machen (etwas Overhead für die Planung hinzufügen). Auf diese Weise laufen Threads, auch auf einem Einzelprozessorsystem, scheinbar parallel.
Für das Betriebssystem ist es also überhaupt nicht wichtig, ob eine Gruppe von Threads von einem einzelnen Benutzer (oder sogar von einem einzelnen Aufruf einer Webanwendung) stammt oder von mehreren Benutzern und Webanrufen erstellt wurde.
welche art von anwendung? – ArchLicher
Eine in Java geschriebene Webanwendung, die auf einem Tomcat-Server bereitgestellt wird – user2296988