SORU
23 HAZİRAN 2012, CUMARTESİ


Java Singleton ve Senkronizasyon

Benim sorguları Singleton ile ilgili Çoklu ve açıklığa kavuşturmak lütfen

  • Bir çok iş parçacıklı Java içinde Singleton uygulamak için en iyi yolu nedir çevre?
  • Birden çok iş parçacığı getInstance()erişmeye çalıştığınızda ne olur aynı zamanda yöntem?
  • Singleton 4* synchronized*bir şey yapabilir miyiz?
  • Tek sınıfları kullanarak eşitleme gerçekten gerekli mi?

CEVAP
23 HAZİRAN 2012, CUMARTESİ


Evet, gereklidir. Geç başlatma ile iş parçacığı güvenliği sağlamak için kullanabileceğiniz birkaç yöntem vardır:

Acımasız senkronizasyon:

private static YourObject instance;

public static synchronized YourObject getInstance() {
    if (instance == null) {
        instance = new YourObject();
    }
    return instance;
}

Bu çözüm gerektirirheriplik gerçeklik yalnızca ilk birkaç gerektiğinde eşitlenmesi.

Double check synchronization:

private static final Object lock = new Object();
private static volatile YourObject instance;

public static YourObject getInstance() {
    YourObject r = instance;
    if (r == null) {
        synchronized (lock) {    // While we were waiting for the lock, another 
            r = instance;        // thread may have instantiated the object.
            if (r == null) {  
                r = new YourObject();
                instance = r;
            }
        }
    }
    return r;
}

Bu çözüm, tek elde deneyin sadece ilk birkaç iş parçacığı kilit edinme sürecinde gitmek zorunda sağlar.

Initialization on Demand:

private static class InstanceHolder {
    private static final YourObject instance = new YourObject();
}

public static YourObject getInstance() {
    return InstanceHolder.instance;
}

Bu çözüm, Java bellek modeli avantajı sınıf başlatma konusunda garanti iş parçacığı güvenliği sağlamak için alır. Her sınıf sadece bir kez yüklenebilir, ve sadece gerektiği zaman yüklenecektir. Demek ilk kez getInstance denir, InstanceHolder yüklenecek ve instance oluşturulacak, ve o zamandan beri bu kontrollü ClassLoaders, ek eşitleme gerekli.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • Megan Parken

    Megan Parken

    19 Temmuz 2009
  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006