Java’da Synchronization Nedir?

sametklou

Java’da Synchronization Nedir?

Java programlama dilinde synchronization, birden fazla thread'in aynı anda aynı kaynağı kullanmasını önlemek için kullanılan bir tekniktir. Bu yöntem sayesinde, thread'ler arasında senkronize bir şekilde kaynaklara erişim sağlanır ve veri bütünlüğü korunur.

Neden Synchronization Kullanılır?

Birden fazla thread'in aynı anda aynı kaynağı değiştirmeye çalışması durumunda veri bütünlüğü bozulabilir ve beklenmeyen sonuçlar elde edilebilir. Synchronization kullanarak bu tür durumların önüne geçilir ve thread'lerin senkronize bir şekilde çalışması sağlanır.

Synchronization Nasıl Yapılır?

Synchronization Java'da birkaç farklı şekilde yapılabilir:

  1. Synchronized Metodlar: Bir metodun başına synchronized anahtar kelimesi ekleyerek, o metodun aynı anda sadece bir thread tarafından çalıştırılmasını sağlayabilirsiniz. Örnek:
public synchronized void synchronizedMethod() {
    // Metodun içeriği
}
  1. Synchronized Bloklar: Belirli bir kod bloğunu synchronized anahtar kelimesi ile senkronize hale getirebilirsiniz. Örnek:
public void synchronizedBlock() {
    synchronized(this) {
        // Kod bloğu içeriği
    }
}

Synchronization Örneği

Aşağıda, iki farklı thread'in aynı kaynağı değiştirmeye çalıştığı durumda synchronization kullanarak veri bütünlüğünü nasıl sağlayabileceğinizi gösteren bir örnek bulunmaktadır:

public class SynchronizationExample {

    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public void process() {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                increment();
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                increment();
            }
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Count: " + count);
    }

    public static void main(String[] args) {
        SynchronizationExample example = new SynchronizationExample();
        example.process();
    }
}

Bu örnekte, increment() metodunu synchronized olarak işaretleyerek iki thread'in aynı anda count değişkenini artırmasını engelliyoruz. Sonuç olarak, doğru bir sayım elde ediyoruz.

Synchronization Java programlama dilinde çok önemli bir konudur ve doğru şekilde kullanıldığında thread güvenliği sağlanabilir. Örnekte verilen kod parçalarını kullanarak, synchronization konsepti hakkında daha detaylı bilgi edinebilirsiniz.