StructuredTaskScope
Alt görevleri çatallayın ve birleştirin
StructuredTaskScope, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
StructuredTaskScope ile Tanışın
StructuredTaskScope, yapılandırılmış eşzamanlılığın temel arayüzüdür. Bir kapsam açar, alt görevleri fork ile başlatır, onları beklemek için join çağırır ve ardından sonuçlarını okursunuz.
Bu bir önizleme özelliğidir; bu nedenle --enable-preview ile derleyip çalıştırmalısınız.
Temel Yaşam Döngüsü
Her kullanım aynı dört adımlı akışı izler:
- Kapsamı, kaynakları otomatik yöneten bir try bloğunda açın
- Biri veya daha fazlası alt görev için
forkçağırın; her çağrı birSubtasktanıtıcısı döndürür - Tamamlanmayı beklemek için
joinçağırın - Her alt görevin sonucunu
get()aracılığıyla okuyun
fork Bir Tanıtıcı Döndürür
fork(Callable), alt görevi sanal bir iş parçacığında hemen başlatır ve bir Subtask döndürür. join() dönene kadar onun get() yöntemini çağırmamalısınız.
Eksiksiz Bir Örnek
Burada iki alt görev eşzamanlı olarak çalışır. Sonuçları okumadan önce ikisinin de tamamlanması gerekir. Bu örnekte yerleşik bir ilke olan ShutdownOnFailure kullanılır.
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 Sonrasında Okuma
Sıralama kuralı kesindir: fork, ardından join, ardından get. join() tamamlanmadan önce bir alt görevde get() çağırmak IllegalStateException oluşturur.
Yaşam süresini yapılandırılmış tutan kural budur.
Alt Görev Durumları
join() sonrasında her Subtask bir state() bildirir:
get()ile bir sonuç sağlayanSUCCESSexception()ile istisnayı sağlayanFAILED- Hiç tamamlanmadıysa
UNAVAILABLE
Çok Sayıda Alt Görev
İstediğiniz kadar alt görev için fork çağrısı yapabilirsiniz; her biri kendi sanal iş parçacığını alır. Bağımsız çağrılardan oluşan bir grubu dallara ayırmanın yolu budur.
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);
}
}
}Kapsam İş Parçacıklarını Yönetir
Kapsam bir AutoCloseable'dır. try bloğu sona erdiğinde close(), her alt görev iş parçacığının sonlanmış olmasını sağlar. Sızıntı oluşması mümkün değildir.
Bu nedenle kapsamı her zaman kaynakları otomatik yöneten bir try bloğunun içinde kullanmalısınız.
Yerleşik İlkeler
JDK, kullanıma hazır iki kapanma ilkesi sunar:
ShutdownOnFailure: Herhangi bir alt görev başarısız olursa geri kalanları iptal ederShutdownOnSuccess: Biri başarılı olduğunda geri kalanları iptal eder
Özel mantık için StructuredTaskScope sınıfından da türetebilirsiniz.
join İşlemini Aynı İş Parçacığı Yapar
Yalnızca kapsamı açan iş parçacığı bu kapsama fork yapabilir ve join çağırabilir. Alt görevler, kendilerine ait kapsamla sınırlandırılmıştır; bu da ağacın düzgün biçimde oluşturulmasını sağlar.
Derleme ve Çalıştırma Seçenekleri
API önizleme aşamasında olduğundan şu komutlarla derleyin:
javac --release 21 --enable-preview Main.javajava --enable-preview Main
Seçenek olmadan bir derleme veya çalışma zamanı hatası alırsınız.
Hızlı Kontrol
Zorunlu çağrı sırasını hatırlayın.
Özet
StructuredTaskScope API'sini öğrendiniz:
- Kaynakları otomatik yöneten try bloğunda açın;
fork,joinve ardındangetçağırın - Her alt görev kendi sanal iş parçacığında çalışır
- Kapsam, kapanmadan önce tüm alt görevlerin sonlanmasını garanti eder
--enable-previewgerektirir
Sırada: başarısızlıkta kapanma ve başarıda kapanma ilkelerinin ayrıntılı incelenmesi.
Sıkça Sorulan Sorular
“StructuredTaskScope” dersi ücretsiz mi?
Evet — “StructuredTaskScope” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“StructuredTaskScope” dersinde ne öğreneceğim?
Alt görevleri çatallayın ve birleştirin Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“StructuredTaskScope” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yapılandırılmış Eşzamanlılık Modeli
- StructuredTaskScope
- Başarıda ve Başarısızlıkta Kapatma
- Hata İşleme ve İptal