Java’da eşzamanlılık ve sanal iş parçacıkları
Executor, CompletableFuture, kilitler ve eşzamanlı koleksiyonlarla güvenli paralel kod yazar; JDK 21 sanal iş parçacıklarıyla binlerce işi basitçe yönetirsin.
Seviye 301 · 18 ders · 15 pratik lab
Dersler
Temeller
- İş parçacığı yaşam döngüsü ve kesme (interrupt)
- Görünürlük, volatile ve Java bellek modeli
- ReentrantLock, ReadWriteLock ve tryLock
- Atomik değişkenler ve LongAdder
- Kısa görev: kilitlenmeyen para transferi
Yüksek düzey araçlar
- Executor havuzları ve doğru boyut
- CompletableFuture ile zincirleme ve birleştirme
- Eşzamanlı koleksiyonlar ve BlockingQueue
- CountDownLatch, Semaphore ve CyclicBarrier
- Fork/Join ile böl ve yönet
- Kısa görev: dosyaları paralel dizinleyen araç
Modern eşzamanlılık
- Sanal iş parçacıkları: binlerce bloklayan iş
- Sabitlenme (pinning) ve sanal iş parçacığı tuzakları
- Yapılandırılmış eşzamanlılık ve kapsamlı değerler
- Zaman aşımı ve iptal
- jstack ile kilitlenme ve takılma teşhisi
- Kısa görev: yüz isteği sanal iş parçacıklarıyla dağıt ve topla
Bitirme
- Bitirme görevi: sınırlı, iptal edilebilir dosya işleme kuyruğu
Pratik lablar
- Kesmeye uyan işçi yazmak: InterruptedException'ı yutan işçiyi, kesme gelince temizliğini yapıp çıkan ve kesme bayrağını koruyan hale getir.
- Görünürlük hatasını volatile ile gidermek: Durdurma bayrağını hiç görmeyip sonsuza dek dönen iş parçacığındaki görünürlük sorununu volatile ile çöz ve nedenini testle göster.
- Yarım kurulmuş nesnenin yayımlanmasını önlemek: Kurucuda this başvurusunu kaçıran ve tembel başlatmada çift denetimi yanlış yapan sınıfı güvenli yayımlama kurallarına göre düzelt.
- Sayaçta kaybolan artışları gidermek: Eşzamanlı artışlarda eksik sayan int sayacı AtomicLong ile değiştir ve yoğun yazmada LongAdder ile karşılaştır.
- Okuma ağırlıklı tabloyu ReadWriteLock ile korumak: Fiyat tablosunu ReadWriteLock ile koru; kilidi finally içinde bırak ve okuyucuların yarım güncelleme görmediğini test et.
- Kilitlenmeyen para aktarımı: Yelkovan Bankası'nın karşılıklı aktarımlarında kilitlenmeyi kilit sıralaması ya da süreli tryLock ile önle; toplam bakiyenin korunduğunu yük testinde göster.
- ExecutorService'i düzgün kapatmak: Havuzu kapatmadığı için bitmeyen programı shutdown ve awaitTermination ile düzelt.
- İki servisi CompletableFuture ile birleştirmek: Fiyat ve stok sorgularını eşzamanlı çalıştırıp birleştir; biri hata verirse varsayılan değere düş ve zaman aşımı uygula.
- Havuz boyutunu ve reddetme politikasını seçmek: Sınırsız kuyruk yüzünden belleği tüketen havuzu sınırlı kuyruk ve uygun reddetme politikasıyla yeniden kur; CPU ve G/Ç işleri için boyutu ölçerek seç.
- Tüm servislerin hazır olmasını beklemek: Üç başlangıç görevinin bitmesini CountDownLatch ile bekle ve süre dolarsa hangisinin bitmediğini bildir.
- Dış servise eşzamanlı çağrıyı sınırlamak: Semaphore ile aynı anda en çok beş çağrıya izin ver; istisnada iznin geri verildiğini ve sınırın aşılmadığını test et.
- Dosyaları Fork/Join ile paralel dizinlemek: Dizin ağacını RecursiveTask ile böl ve sözcük dizinini birleştir; eşik değerini ölçerek seç ve sonucun ardışık sürümle aynı olduğunu göster.
- Yüz isteği sanal iş parçacıklarıyla dağıtmak: Yüz sahte engelleyici isteği sanal iş parçacığı başına görev yürütücüsüyle çalıştır ve sonuçları topla.
- Zaman aşımında kalan görevleri iptal etmek: Yapılandırılmış eşzamanlılıkla üç alt görevi çalıştır; biri başarısız olunca ya da süre dolunca diğerlerinin iptal edildiğini testle göster.
- Takılmayı jstack ile teşhis etmek: Yük altında duran hizmetin iş parçacığı dökümünden kilitlenmeyi ve synchronized içinde sabitlenen sanal iş parçacıklarını bul; düzeltip yük testini geç.
Kurs hakkında
Executor, CompletableFuture, kilitler ve eşzamanlı koleksiyonlarla güvenli paralel kod yazar; JDK 21 sanal iş parçacıklarıyla binlerce işi basitçe yönetirsin.
Ne öğreneceksin
- Temeller
- Yüksek düzey araçlar
- Modern eşzamanlılık
- Bitirme
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.