Java
synchronized
synchronized ile kritik bölgeyi öğrenirsin.
synchronized
synchronized anahtar sözcüğü, bir yöntemi ya da bloğu aynı anda yalnızca bir iş parçacığının çalıştırabileceği bir kritik bölgeye dönüştürür. Bu, paylaşılan verilere erişimi güvenli kılar.
class Counter {
private int count = 0;
public synchronized void inc() {
count++;
}
}
İki iş parçacığı aynı anda inc() çağırdığında, biri diğerini bekler. Bu, count'un doğru artmasını sağlar. synchronized blok da yazılabilir: synchronized(this) { ... }. Aşırı kullanım iş parçacıklarını sırala döndürebilir; dikkatli olun.
synchronized blok
Tüm yöntemi kilitlemek yerine yalnızca bir bölümü kilitlemek için synchronized blok kullanılır. Bu, daha küçük kritik bölge ve daha az bekleme demektir.
public void add(int n) {
synchronized (this) {
count += n;
}
}
Burada this kilit nesnesidir. Farklı nesneler farklı kilitler verir; böylece ayrı parçalar paralel çalışabilir. Doğru kilit nesnesi seçmek, performans ve doğruluk için önemlidir.
Uygulama Counter ile synchronized uygula
Bir Counter sınıfı tanımla; private int count = 0 alanı olsun. public synchronized void inc() yöntemi count++ yapsın. public int get() yöntemi count döndürsün. Bir SyncDemo sınıfında main yaz; Counter örneği oluştur, inc() yöntemini üç kez çağır ve get() sonucunu yazdır.
Örnek çözümü göster
class Counter {
private int count = 0;
public synchronized void inc() {
count++;
}
public int get() {
return count;
}
}
class SyncDemo {
public static void main(String[] args) {
Counter c = new Counter();
c.inc();
c.inc();
c.inc();
System.out.println(c.get());
}
}
Kendini test et
-
synchronized bir yöntem ne sağlar?
- Yöntemin hızlı çalışmasını
- Yöntemin yeniden adlandırılmasını
- Yöntemin static olmasını
- Aynı anda tek iş parçacığının çalışmasını
Cevabı göster
Aynı anda tek iş parçacığının çalışmasını — synchronized, aynı anda tek iş parçacığına izin verir.
-
Eşzamanlama kavramlarını eşleştir
- synchronized
- Karşılıklı dışlama
- lock object
- Kilidi temsil eder
- critical section
- Tek iş parçacığıyla sınırlı bölge
- race condition
- Yarış hatası
-
synchronized yöntemi tamamla
class Counter {
private int count = 0;
public ____ void inc() {
count++;
}
}
Cevabı göster
class Counter {
private int count = 0;
public synchronized void inc() {
count++;
}
}
Sıradaki ders: wait ve notify