Das Modell der strukturierten Nebenläufigkeit
Zusammengehörige Aufgaben als Einheit behandeln
Das Modell der strukturierten Nebenläufigkeit ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist strukturierte Nebenläufigkeit
Strukturierte Nebenläufigkeit (JEP 453, Vorschau) behandelt eine Gruppe zusammengehöriger nebenläufiger Aufgaben als eine einzige Arbeitseinheit.
Wenn die übergeordnete Aufgabe in Unteraufgaben aufgeteilt wird, müssen alle Unteraufgaben abgeschlossen sein, bevor die übergeordnete Aufgabe fortfährt – ähnlich wie bei einem Block-Scope in gewöhnlichem Code.
Welches Problem sie löst
Bei der direkten Verwendung von Executorn kann eine gestartete Aufgabe länger als ihr Ersteller laufen, Ressourcen verlieren oder vergessen werden. Fehler in einem Zweig bleiben möglicherweise unbemerkt, während andere Zweige weiterlaufen.
Das führt zu Thread-Leaks, verwaisten Aufgaben und einer schwer nachvollziehbaren Fehlerbehandlung.
Aufgaben als Baum
Strukturierte Nebenläufigkeit erzwingt eine Eltern-Kind-Beziehung. Unteraufgaben bilden einen Baum, dessen Wurzel die Aufgabe ist, von der sie gestartet wurden.
- Eine Unteraufgabe kann ihren übergeordneten Scope nicht überleben
- Die übergeordnete Aufgabe wartet, bis alle untergeordneten Aufgaben abgeschlossen sind
- Die Abbruchanforderung wird im Baum nach unten weitergegeben
Sequenziellen Code nachbilden
Die zentrale Idee ist, dass nebenläufiger Code wie sequenzieller Code lesbar sein sollte. Ein Scope wird geöffnet, die Arbeit wird aufgeteilt, und der Scope wird erst geschlossen, wenn alles zusammengeführt wurde.
Dadurch werden Lebensdauern offensichtlich und Fehler leichter nachvollziehbar.
Der alte unstrukturierte Ansatz
Hier sehen Sie einen vertrauten, aber unstrukturierten Ansatz mit einem einfachen Executor. Er funktioniert, aber nichts garantiert, dass die beiden Futures dieselbe koordinierte Lebensdauer haben.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws Exception {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
Future<String> user = exec.submit(() -> "Ada");
Future<Integer> order = exec.submit(() -> 7);
System.out.println(user.get() + " has " + order.get() + " orders");
}
}
}Warum Koordination wichtig ist
Wenn im vorherigen Beispiel das Abrufen des Benutzers fehlschlägt, läuft die Aufgabe zum Abrufen der Bestellung nutzlos weiter. Sie müssen sie manuell abbrechen und Ausnahmen aus jedem Aufruf von get() behandeln.
Strukturierte Nebenläufigkeit automatisiert diese Koordination.
Status als Vorschau
Strukturierte Nebenläufigkeit wird als Vorschau-API im Paket java.util.concurrent ausgeliefert. Für ihre Verwendung müssen Sie mit --enable-preview kompilieren und ausführen.
Die zentrale Klasse ist StructuredTaskScope, die in der nächsten Lektion behandelt wird.
Lebensdauergarantien
Innerhalb eines strukturierten Scopes gilt:
- Alle Teilaufgaben werden abgeschlossen, schlagen fehl oder werden abgebrochen, bevor der Scope verlassen wird
- Keine Teilaufgabe läuft im Hintergrund weiter
- Der Aufruf-Stack bildet die tatsächliche Aufgabenhierarchie in Thread-Dumps ab
Vorteil für die Beobachtbarkeit
Da der Baum der Teilaufgaben explizit ist, können JDK-Tools ihn anzeigen. Ein Thread-Dump gruppiert Teilaufgaben unter ihrem übergeordneten Scope. Dadurch wird die Diagnose deutlich übersichtlicher als bei verstreuten Pool-Threads.
Funktioniert gut mit virtuellen Threads
Jede Teilaufgabe in einem strukturierten Scope wird standardmäßig in ihrem eigenen virtuellen Thread ausgeführt. Die geringen Kosten virtueller Threads machen es praktisch, die Arbeit auf viele Teilaufgaben zu verteilen.
Die beiden Funktionen wurden für die Zusammenarbeit entwickelt.
Denkmodell
Stellen Sie sich einen strukturierten Scope wie einen try-with-resources-Block für Nebenläufigkeit vor: Sie öffnen ihn, starten Arbeit mit fork, warten mit join und schließen ihn anschließend. Die schließende Klammer garantiert, dass nichts mehr ausgeführt wird.
Kurzer Test
Testen Sie Ihr Verständnis des Grundprinzips.
Zusammenfassung
Sie haben das Modell der strukturierten Nebenläufigkeit kennengelernt:
- Zusammengehörige Aufgaben bilden einen Baum, der an die Lebensdauer eines Scopes gebunden ist
- Nebenläufiger Code liest sich wie sequenzieller Code
- Es handelt sich um eine Preview-API, für die
--enable-previewerforderlich ist - Sie lässt sich natürlich mit virtuellen Threads kombinieren
Als Nächstes folgt die StructuredTaskScope-API selbst.
Häufig gestellte Fragen
Ist die Lektion „Das Modell der strukturierten Nebenläufigkeit“ kostenlos?
Ja — der vollständige Text von „Das Modell der strukturierten Nebenläufigkeit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Das Modell der strukturierten Nebenläufigkeit“?
Zusammengehörige Aufgaben als Einheit behandeln Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Das Modell der strukturierten Nebenläufigkeit“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Das Modell der strukturierten Nebenläufigkeit
- StructuredTaskScope
- Beenden bei Fehler und Erfolg
- Fehlerbehandlung und Abbruch