CodeBlanks Logo Icon CodeBlanks

Özet - Memory model

happens-before ve volatile'ı birleştirerek bir yayın aracı yazarsın.

Özet - Memory model

Bu grupta Java Bellek Modeli'nin temellerini gördük: yığın ve öbek ayrımı, happens-before sıralaması, volatile ile görünürlük, final alanların güvenli yayınlaması ve Metaspace. Bunlar iş parçacıkları arası tutarlılığı sağlar.

İş parçacığı güvenliği için üç anahtar sözcük hatırla: synchronized sıralama ve karşılıklı dışlama, volatile görünürlük, final değişmezlik ve güvenli yayınlama. Şimdi iki küçük görevle bunları tekrar edeceğiz.

Birlikte kullanım

Gerçek sistemlerde bu anahtar sözcükler birlikte kullanılır. Değişmez durum için final, basit bir bayrak için volatile, karmaşık oku-yaz işlemleri için synchronized tercih edilir.

Örnek: bir Config sınıfında ad değişmez olduğu için final String name, aktiflik bayrağı değişebildiği için volatile boolean active tutulur. Bu kombinasyon hem güvenli yayınlama hem de güncel görünürlük sağlar. Doğru anahtar sözcüğü seçmek, gereksiz kilitlemeden kaçınarak performansı korur.

Uygulama Config sınıfında final ve volatile

Bir Config sınıfı yaz: final String name ve volatile boolean active alanları, Config(String name) kurucusu name atayıp active = true yapsın. main içinde new Config("uygulama") ile oluştur ve c.name değerini System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Config sınıfını tanımla
// final name ve volatile active ekle
// main içinde adı yazdır

Örnek çözüm

Main.java
class Config {
    final String name;
    volatile boolean active;
    public Config(String name) { this.name = name; this.active = true; }
}

public class ConfigDemo {
    public static void main(String[] args) {
        Config c = new Config("uygulama");
        System.out.println(c.name);
    }
}

Beklenen çıktı

uygulama

Uygulama Değişmez Triangle sınıfı

Bir Triangle sınıfı tanımla: final int a, final int b, final int c alanları ve bu alanları atayan kurucu. main içinde new Triangle(2, 3, 4) ile oluştur ve t.a + t.b + t.c sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Triangle sınıfını tanımla
// final a, b, c alanları ekle
// main içinde toplamı yazdır

Örnek çözüm

Main.java
class Triangle {
    final int a;
    final int b;
    final int c;
    public Triangle(int a, int b, int c) { this.a = a; this.b = b; this.c = c; }
}

public class TriangleDemo {
    public static void main(String[] args) {
        Triangle t = new Triangle(2, 3, 4);
        System.out.println(t.a + t.b + t.c);
    }
}

Beklenen çıktı

9

Soru ve cevaplar

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

1 Hangi anahtar sözcük bellek görünürlüğü sağlar?

  • volatile Doğru cevap
  • new
  • getClass
  • int

Açıklama: volatile, alanın görünürlüğünü garanti eder.

2 volatile bayrağı tanımla

Soru
private ____ boolean active;
Cevap
private volatile boolean active;

Açıklama: volatile bayrak görünürlüğü garanti eder.

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