Java Academy · Pelajaran

StructuredTaskScope

Cabangkan dan cantumkan subtugasan

Pelajaran 2 daripada 413 langkah

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
  • fork satu atau lebih subtugas, setiap satunya mengembalikan pemegang Subtask
  • join untuk 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():

  • SUCCESS dengan hasil daripada get()
  • FAILED dengan pengecualian daripada exception()
  • UNAVAILABLE jika 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 gagal
  • ShutdownOnSuccess: 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.java
  • java --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, kemudian get
  • 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.

Percuma untuk bermula

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

  1. Model Keserentakan Berstruktur
  2. StructuredTaskScope
  3. Penutupan ketika Gagal dan Berjaya
  4. Pengendalian Ralat dan Pembatalan
← Kembali ke Java Academy