CodeBlanks Logo Icon CodeBlanks

happens-before

happens-before ile hafıza sıralamasını öğrenirsin.

happens-before ilişkisi

happens-before, Java Bellek Modeli'nin (JMM) sıralama garantisidir. Eğer A işlemi B'den önce gerçekleşirse, A'nın bellek değişiklikleri B tarafından görülür. Bu, iş parçacıkları arası tutarlılığı sağlar.

Bu ilişkiyi birkaç mekanizma kurar: synchronized bloğu kilidi bırakanın değişikliklerini kilidi alanın görmesini sağlar; volatile yazımı sonrasındaki okumalar yeni değeri görür; final alanlar kurucu bitiminde görünür hale gelir. happens-before olmadan bir iş parçacığı diğerinin yazımını hiç görmeyebilir.

synchronized ile sıralama

Bir synchronized bloğu ya da yöntemi, aynı kilide sahip tüm iş parçacıkları için tek tek girişi zorunlu kılar. Kilidi bırakan iş parçacığının yaptığı tüm değişiklikler, kilidi sonraki alan iş parçacığı tarafından görülür.

Örnek: bir Counter sınıfında synchronized void inc() ve synchronized int get() olsun. Bir iş parçacığı inc yapıp kilidi bıraktığında, sonra get çağıran iş parçacığı yeni değeri görür. Bu, happens-before ilişkisinin en somut yoludur.

Uygulama synchronized sayaç

Bir Counter sınıfı yaz: private int count alanı, synchronized void inc() ve synchronized int get() yöntemleri. inc count++ yapsın. main içinde inc iki kez çağır ve get sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Counter sınıfını tanımla
// synchronized inc ve get ekle
// main içinde sonucu yazdır

Örnek çözüm

Main.java
class Counter {
    private int count;
    public synchronized void inc() { count++; }
    public synchronized int get() { return count; }
}

public class HappensBeforeDemo {
    public static void main(String[] args) {
        Counter c = new Counter();
        c.inc();
        c.inc();
        System.out.println(c.get());
    }
}

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Garanti mekanizmalarını eşleştir

Kavram Anlamı
synchronized Happens-before
volatile Görünürlük
final Güvenli yayınlama
yerel değişken Tek iş parçacığı

2 happens-before ilişkisini hangi mekanizma kurar?

  • synchronized blok Doğru cevap
  • yerel değişken
  • final alan
  • Metaspace

Açıklama: synchronized, kilitle happens-before kurar.

3 synchronized anahtar sözcüğünü ekle

Soru
public ____ void inc() { count++; }
Cevap
public synchronized void inc() { count++; }

Açıklama: synchronized yöntemi kilitleyerek sıralar.

Uzman bölümündeki tüm dersler