Kod Sörfü

Dalgalan her satırda, keşfet sonsuz kod okyanusunu.

Java’da senkronizasyon (Synchronization in Java)

Java’da senkronizasyon (Synchronization in Java)

Java’da senkronizasyon, birden fazla thread’in aynı kaynağa (örneğin bir obje veya metod) güvenli bir şekilde erişimini yönetmek için kullanılır. Çoklu thread’lerin aynı anda aynı kaynağı değiştirmeye çalışması durumunda veri tutarsızlığına ve beklenmeyen sonuçlara yol açabilir. Java’da senkronizasyon mekanizması, bu tür sorunları önlemek için kritik bölümleri korumak adına kullanılır. Bu analizde, Java’da senkronizasyonun nasıl çalıştığını, senkronizasyon yöntemlerini ve senkronizasyonun kullanımına dair örnekleri ele alacağız.

Senkronizasyonun Temelleri

Java’da senkronizasyon, synchronized anahtar kelimesi ile sağlanır. Bu anahtar kelime, bir metodun veya bloğun aynı anda yalnızca bir thread tarafından erişilebilir olmasını sağlar. Bir thread, senkronize edilmiş bir metoda veya bloğa girdiğinde, o metoda veya bloğa ait olan kilit (lock) otomatik olarak alınır. Bu kilidi alan thread, metot veya bloktan çıkana kadar diğer thread’lerin erişimine kapalı olur.

Senkronize Metodlar

Bir metodu senkronize etmek, o metoda aynı anda yalnızca bir thread’in erişebileceği anlamına gelir. Eğer bir sınıfın birden fazla nesnesi varsa, her nesnenin kendi kilidi vardır ve bu nedenle her nesnenin senkronize metotları aynı anda farklı thread’ler tarafından erişilebilir.

public synchronized void senkronizeMetod() {
    // Kritik bölge
}

Senkronize Bloklar

Bazen tüm metodu senkronize etmek yerine, yalnızca belirli bir kod bölümünü senkronize etmek daha verimli olabilir. Bu durumda senkronize bloklar kullanılır. Senkronize bloklar, belirli bir obje üzerinde kilit sağlar.

Senkronizasyonun Kullanımı ve Örnekler

Senkronizasyonun kullanılması, özellikle paylaşılan kaynaklara erişim gerektiren durumlarda önemlidir. Aşağıda, senkronizasyon kullanımına dair iki örnek verilmiştir.

Örnek 1: Banka Hesabı İşlemleri

Birden fazla thread’in aynı banka hesabı üzerinde para çekme işlemi yapmasını ele alalım. Eğer bu işlemler senkronize edilmezse, hesap bakiyesi beklenmedik şekilde değişebilir

.

public class BankaHesabi {
    private int bakiye = 100;

    public synchronized void paraCek(int miktar) {
        if(bakiye >= miktar) {
            bakiye -= miktar;
            System.out.println("Para çekildi: " + miktar);
        } else {
            System.out.println("Yetersiz bakiye.");
        }
    }
}
Mehmet Alp avatarı

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Mehmet Alp Albayraktaroğlu

LinkedIn’de benimle iletişime geçmekten çekinmeyin veya bana bir e-posta gönderin—teknolojiyle ilgili her şeyi konuşmaktan mutluluk duyarım! 🚀👩‍💻