StructuredTaskScope
Buat dan gabungkan subtugas.
StructuredTaskScope adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Mengenal StructuredTaskScope
StructuredTaskScope adalah antarmuka pemrograman aplikasi inti dari konkurensi terstruktur. Anda membuka scope, melakukan fork subtugas, melakukan join untuk menunggunya, lalu membaca hasilnya.
Ini adalah fitur pratinjau, jadi kompilasikan dan jalankan dengan --enable-preview.
Siklus Hidup Dasar
Setiap penggunaan mengikuti urutan empat langkah yang sama:
- Buka scope dalam blok try-dengan-sumber daya
- Lakukan
forkpada satu atau beberapa subtugas, yang masing-masing mengembalikan peganganSubtask - Lakukan
joinuntuk menunggu hingga selesai - Baca hasil setiap subtugas melalui
get()
fork Mengembalikan Pegangan
fork(Callable) segera memulai subtugas pada utas virtual dan mengembalikan Subtask. Anda tidak boleh memanggil get() sebelum join() selesai.
Contoh Lengkap
Di sini, dua subtugas berjalan secara bersamaan. Keduanya harus selesai sebelum kita membaca hasilnya. Contoh ini menggunakan ShutdownOnFailure, yaitu kebijakan bawaan.
import java.util.concurrent.StructuredTaskScope;
public class Main {
public static void main(String[] args) throws Exception {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
var name = scope.fork(() -> "Grace");
var count = scope.fork(() -> 3);
scope.join();
scope.throwIfFailed();
System.out.println(name.get() + " placed " + count.get() + " orders");
}
}
}join Lalu Baca
Aturan urutannya ketat: fork, lalu join, kemudian get. Memanggil get() pada subtugas sebelum join() selesai akan melemparkan IllegalStateException.
Aturan inilah yang menjaga agar masa hidup tetap terstruktur.
Status Subtugas
Setelah join(), setiap Subtask melaporkan state():
SUCCESSdengan hasil dariget()FAILEDdengan pengecualian dariexception()UNAVAILABLEjika belum pernah selesai
Banyak Subtugas
Anda dapat melakukan fork pada sebanyak mungkin subtugas; masing-masing mendapatkan utas virtualnya sendiri. Inilah cara Anda melakukan pencabangan untuk sekumpulan panggilan independen.
import java.util.*;
import java.util.concurrent.StructuredTaskScope;
public class Main {
public static void main(String[] args) throws Exception {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
List<StructuredTaskScope.Subtask<Integer>> tasks = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
final int n = i;
tasks.add(scope.fork(() -> n * n));
}
scope.join();
scope.throwIfFailed();
int total = tasks.stream().mapToInt(StructuredTaskScope.Subtask::get).sum();
System.out.println("Sum of squares 1..5 = " + total);
}
}
}scope Memiliki Utas
scope adalah AutoCloseable. Saat blok try berakhir, close() memastikan setiap utas subtugas telah berhenti. Tidak mungkin terjadi kebocoran.
Inilah alasan Anda selalu menggunakannya di dalam blok try-dengan-sumber daya.
Kebijakan Bawaan
JDK menyediakan dua kebijakan penghentian siap pakai:
ShutdownOnFailure: batalkan sisanya jika ada subtugas yang gagalShutdownOnSuccess: batalkan sisanya setelah salah satu subtugas berhasil
Anda juga dapat membuat subkelas StructuredTaskScope untuk logika khusus.
join oleh Utas yang Sama
Hanya utas yang membuka scope yang boleh melakukan fork ke dalamnya dan memanggil join. Subtugas dibatasi pada scope pemiliknya, sehingga pohonnya tetap terbentuk dengan benar.
Opsi Kompilasi dan Eksekusi
Karena antarmuka pemrograman aplikasi ini merupakan fitur pratinjau, bangunlah dengan:
javac --release 21 --enable-preview Main.javajava --enable-preview Main
Tanpa opsi tersebut, Anda akan mendapatkan kesalahan kompilasi atau eksekusi.
Pemeriksaan Cepat
Ingat kembali urutan pemanggilan yang wajib.
Ringkasan
Anda telah mempelajari antarmuka pemrograman aplikasi StructuredTaskScope:
- Buka dalam try-dengan-sumber daya, lakukan
fork,join, laluget - Setiap subtugas berjalan pada utas virtualnya sendiri
- scope menjamin semua subtugas berhenti sebelum ditutup
- Memerlukan
--enable-preview
Berikutnya: kebijakan shutdown-on-failure dan shutdown-on-success secara mendalam.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “StructuredTaskScope” gratis?
Ya — teks lengkap “StructuredTaskScope” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “StructuredTaskScope”?
Buat dan gabungkan subtugas. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “StructuredTaskScope” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Model Konkurensi Terstruktur
- StructuredTaskScope
- Penghentian saat Gagal dan Berhasil
- Penanganan Error dan Pembatalan