Başarıda ve Başarısızlıkta Kapatma
Görev sonuçlarını koordine edin
Başarıda ve Başarısızlıkta Kapatma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. 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.
İki Yaygın Örüntü
Eşzamanlı iş dağıtımlarının çoğu iki biçimden birine girer:
- Tümünün başarılı olması gerekir: Biri başarısız olursa geri kalanları bırakın.
ShutdownOnFailurekullanın. - İlk başarılı olan kazanır: Biri başarılı olur olmaz geri kalanları iptal edin.
ShutdownOnSuccesskullanın.
JDK, ikisini de hazır olarak sunar.
ShutdownOnFailure Fikri
ShutdownOnFailure, bir kullanıcı profilini ve kullanıcının siparişlerini birlikte toplamak gibi tüm görevlerin başarılı olması gereken durumlar içindir.
Bir alt görev istisna fırlatırsa kapsam, boşuna çaba harcamamanız için diğerlerini iptal eder.
ShutdownOnFailure Örneği
join() sonrasında, varsa ilk başarısızlığı bir ExecutionException içine sararak yeniden fırlatan throwIfFailed() çağrı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 a = scope.fork(() -> fetch("profile"));
var b = scope.fork(() -> fetch("orders"));
scope.join();
scope.throwIfFailed();
System.out.println(a.get() + " + " + b.get());
}
}
static String fetch(String what) {
return what + "-ok";
}
}throwIfFailed Ne Yapar
throwIfFailed(), alt görevleri inceler. Tümü başarılı olduysa hiçbir işlem yapmaz. Herhangi biri başarısız olduysa özgün istisnayı saran bir istisna fırlatır.
Nedeni özel bir istisna türüne dönüştürmek için bir işlev de geçirebilirsiniz.
ShutdownOnSuccess Fikri
ShutdownOnSuccess, yedeklilik veya yarış durumları içindir: birkaç yansıyı sorgular ve hangisi önce yanıt verirse onun sonucunu alırsınız.
Bir alt görev başarılı olduğu anda kapsam diğerlerini iptal eder ve kazanan sonucu saklar.
ShutdownOnSuccess Örneği
Kazanan değeri result() ile alırsınız. Hiçbir alt görev başarılı olmadıysa bu çağrı istisna oluşturur.
import java.util.concurrent.StructuredTaskScope;
public class Main {
public static void main(String[] args) throws Exception {
try (var scope = new StructuredTaskScope.ShutdownOnSuccess<String>()) {
scope.fork(() -> queryMirror("eu"));
scope.fork(() -> queryMirror("us"));
scope.join();
System.out.println("Fastest answer: " + scope.result());
}
}
static String queryMirror(String region) {
return region + "-data";
}
}result ile get Karşılaştırması
Aradaki farka dikkat edin:
ShutdownOnFailure: Her alt görevi kendiget()yöntemiyle okuyunShutdownOnSuccess: Tek kazananı kapsamınresult()yöntemiyle okuyun
İptal İşbirlikçidir
Bir kapsam kapandığında kalan alt görev iş parçacıklarını kesintiye uğratır. İyi tasarlanmış görevler kesintiyi denetler ve hızla durur.
Standart kütüphanedeki engelleyici çağrılar genellikle kesintiye otomatik olarak yanıt verir.
Zaman Aşımıyla join
Her iki ilke de bir son tarihi destekler. joinUntil(Instant) çağrısı yalnızca belirli bir zamana kadar bekler; ardından TimeoutException oluşturur ve kapsamı kapatır.
İlke Seçimi
Kendinize şu soruyu sorun: tüm sonuçlara mı, yoksa yalnızca ilk sonuca mı ihtiyacım var?
- Tüm sonuçlar ve hatada hızlı başarısızlık:
ShutdownOnFailure - Herhangi bir sonuç ve en hızlı olanın kazanması:
ShutdownOnSuccess
Bunların dışındaki durumlar için StructuredTaskScope sınıfından türeyin.
Özel İlkeler
StructuredTaskScope sınıfını genişletip özel kurallar uygulamak için handleComplete(Subtask) yöntemini geçersiz kılabilirsiniz; örneğin ilk N başarıyı toplayabilir veya belirli sayıda başarısızlıktan sonra kapsamı kapatabilirsiniz.
Hızlı Kontrol
Senaryoyu uygun ilkeyle eşleştirin.
Özet
İki yerleşik kapanma ilkesini öğrendiniz:
- Tüm görevlerin başarılı olması için
ShutdownOnFailure+throwIfFailed+ alt görev başınaget - İlk başarılı olanın kazanması için
ShutdownOnSuccess+result - Kapanma, kalan alt görevleri işbirlikçi biçimde kesintiye uğratır
joinUntilson tarihler ekler; sınıftan türetme özel kurallar ekler
Sırada: hata işleme ve iptalin ayrıntılı incelenmesi.
Sıkça Sorulan Sorular
“Başarıda ve Başarısızlıkta Kapatma” dersi ücretsiz mi?
Evet — “Başarıda ve Başarısızlıkta Kapatma” 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.
“Başarıda ve Başarısızlıkta Kapatma” dersinde ne öğreneceğim?
Görev sonuçlarını koordine edin 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 3. dersidir.
“Başarıda ve Başarısızlıkta Kapatma” 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