logo

Java Yöntemi ve Blok Senkronizasyonu

Java'da senkronizasyon, birden fazla iş parçacığının paylaşılan kaynaklara eriştiği eşzamanlı programlamada çok önemlidir. Veri tutarsızlığını önleyerek aynı anda yalnızca bir iş parçacığının kritik bir bölüme erişmesini sağlar. Senkronizasyon, yöntemlere veya kod bloklarına uygulanabilir. Yöntem ve Blok Senkronizasyonu

Shilpa Shetty'nin yaşı

Senkronizasyon Türleri

  • Yöntem Senkronizasyonu: Aynı anda yalnızca bir iş parçacığının yürütmesini sağlamak için yöntemin tamamını kilitler.
  • Senkronizasyonu Blokla: Bir yöntem içindeki kodun yalnızca kritik bölümünü kilitler.

Birden fazla iş parçacığı tarafından erişilen değiştirilebilir nesneler için senkronizasyon gereklidir. Değiştirilemez nesneler veya salt okunur erişim, senkronizasyon gerektirmez.

Yöntem Senkronizasyonu

Bir yöntemi senkronize etmek için senkronize edilmiş anahtar kelimeyi ekleyin. Bu, aynı anda yalnızca bir iş parçacığının yöntemi yürütebilmesini sağlar.



Örnek 1: Senkronize Olmayan Yöntem

Java
class Line {  public void getLine() {  for (int i = 0; i < 3; i++) {  System.out.println(i);  try { Thread.sleep(100); }   catch (Exception e) { System.out.println(e); }  }  } } class Train extends Thread {  Line line;  Train(Line line) { this.line = line; }  public void run() { line.getLine(); } } public class Geeks {  public static void main(String[] args) {  Line obj = new Line();  Train t1 = new Train(obj);  Train t2 = new Train(obj);  t1.start();  t2.start();  } } 

Çıkış
0 0 1 1 2 2 

Açıklama: t1 ve t2 iş parçacıkları aynı anda yönteme erişerek karışık çıktıya neden olur.

Örnek 2: Senkronize Yöntem

Java
class Line {  synchronized public void getLine() {  for (int i = 0; i < 3; i++) {  System.out.println(i);  try { Thread.sleep(100); }   catch (Exception e) { System.out.println(e); }  }  } } class Train extends Thread {  Line line;  Train(Line line) { this.line = line; }  public void run() { line.getLine(); } } public class Geeks {  public static void main(String[] args) {  Line obj = new Line();  Train t1 = new Train(obj);  Train t2 = new Train(obj);  t1.start();  t2.start();  } } 

Çıkış
0 1 2 0 1 2 

Açıklama: Veri tutarlılığını sağlamak için yöntemi aynı anda yalnızca bir iş parçacığı yürütür.

Senkronizasyonu Blokla

Blok senkronizasyonu, bir yöntemin yalnızca bir kısmı kritik kod içerdiğinde kullanılır. Bu, iş parçacıklarının kritik olmayan kodları aynı anda yürütmesine izin vererek performansı artırır.

Java dizesi.format

Örnek: Senkronize Blok

Java
import java.util.*; class Geek {  String name = '';  public int count = 0;  public void geekName(String geek List<String> list) {  synchronized(this) {  name = geek;  count++;  }  list.add(geek);  } } public class GFG {  public static void main(String[] args) {  Geek gk = new Geek();  List<String> list = new ArrayList<>();  gk.geekName('Mohit' list);  System.out.println(gk.name);  } } 

Çıkış
Mohit 

Açıklama: Yalnızca blok güncelleme adı ve sayısı senkronize edilir. Listeye ad ekleme işlemi eş zamanlı olarak yürütülür.

Yöntem ve Blok Senkronizasyonu

ÖzellikYöntem SenkronizasyonuSenkronizasyonu Blokla
Kapsam Tüm yöntemi kilitlerYalnızca belirli kod bloğunu kilitler
Performans Kritik olmayan kod için gereksiz engellemeye neden olabilirDaha verimli, yalnızca kritik bölümler senkronize edilir
Kilit Yöntemin nesnesindeki kilidi alırBlokta belirtilen nesne veya sınıf üzerindeki kilidi alır
Esneklik Daha az esnek olan tüm yöntem kilitlendiDaha esnek, seçici senkronizasyona olanak tanır

Önemli Noktalar

  • Senkronize bir yönteme/bloğa giren bir iş parçacığı, bir kilit alır ve çıkışta onu serbest bırakır.
  • Örnek yöntemleri/bloklar: Nesne düzeyinde kilit edinin.
  • Statik yöntemler/bloklar: Sınıf düzeyinde kilit edinin.
  • Boş nesnelerdeki senkronizasyon NullPointerException'ı oluşturur.
  • wait() notify() ve notifyAll() senkronizasyondaki anahtar yöntemlerdir.
  • İş parçacıklarının farklı nesneleri kilitlemesini önlemek için son olmayan alanları senkronize etmekten kaçının.
  • senkronize anahtar kelime değişkenlere uygulanamaz.

Avantajları

  • Çok iş parçacıklı programlarda paylaşılan kaynakların karşılıklı hariç tutulmasını sağlar.
  • Hem senkronize örnek hem de statik yöntemler, farklı nesneleri kilitledikleri için aynı anda çalışabilir.

Sınırlamalar

  • Eşzamanlılığı sınırlayan eşzamanlı okumaları önler.
  • Senkronize yöntemler performansı düşürebilir. Yalnızca kritik bölümler için blok senkronizasyonunu tercih edin.
Test Oluştur