Model Konkurensi Terstruktur
Perlakukan tugas terkait sebagai satu unit.
Model Konkurensi Terstruktur adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Konkurensi Terstruktur
Konkurensi terstruktur (JEP 453, pratinjau) memperlakukan sekelompok tugas konkuren yang saling terkait sebagai satu unit pekerjaan.
Jika tugas induk membagi pekerjaan menjadi subtugas, semua subtugas tersebut harus selesai sebelum tugas induk melanjutkan, seperti lingkup blok dalam kode biasa.
Masalah yang Diselesaikannya
Dengan eksekutor tanpa struktur, tugas yang dibuat dapat hidup lebih lama daripada pembuatnya, bocor, atau terlupakan. Kesalahan pada satu cabang mungkin tidak diketahui sementara cabang lain terus berjalan.
Hal ini menyebabkan kebocoran utas, pekerjaan yatim, dan penanganan kegagalan yang membingungkan.
Tugas sebagai Pohon
Konkurensi terstruktur menerapkan hubungan induk-anak. Subtugas membentuk pohon yang berakar pada tugas yang memulainya.
- Subtugas tidak dapat hidup lebih lama daripada lingkup induknya
- Tugas induk menunggu semua anak selesai
- Pembatalan mengalir ke bawah pohon
Meniru Kode Berurutan
Gagasan utamanya adalah kode konkuren seharusnya terbaca seperti kode berurutan. Sebuah lingkup dibuka, pekerjaan bercabang, dan lingkup ditutup hanya setelah semuanya bergabung kembali.
Hal ini membuat masa hidup menjadi jelas dan kesalahan mudah dipahami.
Cara Lama Tanpa Struktur
Berikut pendekatan yang sudah umum, tetapi tanpa struktur, menggunakan eksekutor biasa. Pendekatan ini berfungsi, tetapi tidak ada yang menjamin kedua hasil tertunda memiliki masa hidup yang terkoordinasi.
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");
}
}
}Mengapa Koordinasi Penting
Pada contoh sebelumnya, jika pengambilan data pengguna gagal, tugas pesanan terus berjalan tanpa guna. Anda harus membatalkannya secara manual dan menangani pengecualian dari setiap get().
Konkurensi terstruktur mengotomatiskan koordinasi ini.
Status Pratinjau
Konkurensi terstruktur tersedia sebagai API pratinjau dalam paket java.util.concurrent. Untuk menggunakannya, Anda harus mengompilasi dan menjalankan program dengan --enable-preview.
Kelas utamanya adalah StructuredTaskScope, yang akan dibahas pada pelajaran berikutnya.
Jaminan Masa Hidup
Di dalam scope terstruktur:
- Semua subtugas selesai, gagal, atau dibatalkan sebelum scope berakhir
- Tidak ada subtugas yang lolos dan berjalan di latar belakang
- Tumpukan pemanggilan mencerminkan hierarki tugas yang sebenarnya dalam dump utas
Manfaat Observabilitas
Karena pohon subtugas dinyatakan secara eksplisit, alat JDK dapat menampilkannya. Dump utas mengelompokkan subtugas di bawah scope induknya, sehingga diagnosis jauh lebih jelas daripada kumpulan utas yang tersebar.
Berpadu dengan Utas Virtual
Setiap subtugas dalam scope terstruktur berjalan pada utas virtualnya sendiri secara bawaan. Biaya rendah utas virtual membuat pencabangan menjadi banyak subtugas dapat dilakukan secara praktis.
Kedua fitur ini dirancang untuk bekerja bersama.
Model Mental
Bayangkan scope terstruktur seperti blok try-dengan-sumber daya untuk konkurensi: Anda membukanya, melakukan fork pekerjaan, melakukan join, lalu menutupnya. Kurung kurawal penutup menjamin bahwa tidak ada yang masih berjalan.
Pemeriksaan Cepat
Uji pemahaman Anda tentang prinsip inti.
Ringkasan
Anda telah mempelajari model konkurensi terstruktur:
- Tugas-tugas yang berkaitan membentuk pohon yang terikat pada masa hidup scope
- Kode konkuren dibaca seperti kode berurutan
- Ini adalah antarmuka pemrograman aplikasi pratinjau yang memerlukan
--enable-preview - Fitur ini berpadu secara alami dengan utas virtual
Berikutnya: antarmuka pemrograman aplikasi StructuredTaskScope itu sendiri.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Model Konkurensi Terstruktur” gratis?
Ya — teks lengkap “Model Konkurensi Terstruktur” 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 “Model Konkurensi Terstruktur”?
Perlakukan tugas terkait sebagai satu unit. 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 1 dari 4.
Berapa lama pelajaran “Model Konkurensi Terstruktur” 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