Java
Ö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.
Örnek çözümü göster
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);
}
}
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.
Örnek çözümü göster
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);
}
}
Kendini test et
-
Hangi anahtar sözcük bellek görünürlüğü sağlar?
Cevabı göster
volatile — volatile, alanın görünürlüğünü garanti eder.
-
volatile bayrağı tanımla
private ____ boolean active;
Cevabı göster
private volatile boolean active;
Sıradaki ders: Buffer