StructuredTaskScope
Cabangkan dan cantumkan subtugasan
StructuredTaskScope ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Kenali StructuredTaskScope
StructuredTaskScope ialah antara muka pengaturcaraan teras bagi keserentakan berstruktur. Anda membuka scope, fork subtugas, join untuk menunggunya, kemudian membaca hasilnya.
Ini ialah ciri pratonton, jadi kompil dan jalankan dengan --enable-preview.
Kitar Hayat Asas
Setiap penggunaan mengikut rentak empat langkah yang sama:
- Buka scope dalam blok cuba-dengan-sumber
forksatu atau lebih subtugas, setiap satunya mengembalikan pemegangSubtaskjoinuntuk menunggu penyelesaian- Baca hasil setiap subtugas melalui
get()
fork Mengembalikan Pemegang
fork(Callable) memulakan subtugas dengan serta-merta pada utas maya dan mengembalikan Subtask. Anda tidak boleh memanggil get() sebelum join() mengembalikan hasil.
Contoh Lengkap
Di sini, dua subtugas berjalan serentak. Kedua-duanya mesti selesai sebelum kita membaca hasilnya. Contoh ini menggunakan ShutdownOnFailure, iaitu dasar terbina dalam.
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 Kemudian Baca
Peraturan susunannya ketat: fork, kemudian join, kemudian get. Memanggil get() pada subtugas sebelum join() selesai akan melontarkan IllegalStateException.
Peraturan inilah yang mengekalkan struktur tempoh hayat.
Keadaan Subtugas
Selepas join(), setiap Subtask melaporkan state():
SUCCESSdengan hasil daripadaget()FAILEDdengan pengecualian daripadaexception()UNAVAILABLEjika ia tidak pernah selesai
Banyak Subtugas
Anda boleh melakukan fork untuk seberapa banyak subtugas yang Anda mahu; setiap satunya mendapat utas mayanya sendiri. Beginilah cara Anda mengembangkan sekumpulan panggilan bebas.
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 ialah AutoCloseable. Apabila blok cuba berakhir, close() memastikan setiap utas subtugas telah ditamatkan. Tiada kebocoran boleh berlaku.
Inilah sebabnya Anda sentiasa menggunakannya dalam blok cuba-dengan-sumber.
Dasar Terbina Dalam
JDK menyediakan dua dasar penutupan yang sedia digunakan:
ShutdownOnFailure: batalkan yang lain jika mana-mana subtugas gagalShutdownOnSuccess: batalkan yang lain sebaik sahaja satu subtugas berjaya
Anda juga boleh mensubkelas StructuredTaskScope untuk logik tersuai.
Utas yang Sama Memanggil join
Hanya utas yang membuka scope boleh melakukan fork ke dalamnya dan memanggil join. Subtugas terhad kepada scope pemiliknya, yang memastikan pepohon kekal terbentuk dengan betul.
Bendera Kompilasi dan Pelaksanaan
Oleh sebab antara muka pengaturcaraan ini ialah pratonton, bina dengan:
javac --release 21 --enable-preview Main.javajava --enable-preview Main
Tanpa bendera tersebut, Anda akan mendapat ralat kompilasi atau masa jalan.
Semakan Pantas
Ingat semula susunan panggilan yang wajib.
Imbas Kembali
Anda telah mempelajari antara muka pengaturcaraan StructuredTaskScope:
- Buka dalam blok cuba-dengan-sumber,
fork,join, kemudianget - Setiap subtugas berjalan pada utas mayanya sendiri
- scope menjamin semua subtugas ditamatkan sebelum ditutup
- Memerlukan
--enable-preview
Seterusnya: dasar penutupan apabila gagal dan penutupan apabila berjaya secara terperinci.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “StructuredTaskScope” percuma?
Ya — teks penuh “StructuredTaskScope” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “StructuredTaskScope”?
Cabangkan dan cantumkan subtugasan Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “StructuredTaskScope” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Model Keserentakan Berstruktur
- StructuredTaskScope
- Penutupan ketika Gagal dan Berjaya
- Pengendalian Ralat dan Pembatalan