SORU
23 ŞUBAT 2009, PAZARTESİ


Nasıl senkronize statik yöntemler Java mı?

Eğer statik yöntemleri ile açıklama Dersim var eğer bu uyku fonksiyonları temel veri erişimi gerçekleştirmek için arayacak. Eğer yöntemi senkronize yapma, iş parçacığı güvenliği sağlamak için doğru bir yaklaşım olup olmadığını merak ediyorum.

Bu aynı DB örneğine bilgi erişimi engellemek istiyorum. Ancak, eğer aşağıdaki kodu getObjectByİd belirli bir sınıf tarafından çağrıldığında tüm Sınıflar için çağrıldığını engellemediğini artık eminim.

public class Utils {
     public static synchronized Object getObjectById (Class objclass, Long id) {
           // call hibernate class
         Session session = new Configuration().configure().buildSessionFactory().openSession();
         Object obj = session.load(objclass, id);
         session.close();
         return obj;
     }

     // other static methods
}

CEVAP
24 ŞUBAT 2009, Salı


Soruyu daha genel bir adres

Senkronize yöntemleri kullanarak gerçekten sadece steno olduğunu unutmayın (class SomeClass olduğunu varsayıyorum):

synchronized static void foo() {
    ...
}

aynı gibi

static void foo() {
    synchronized(SomeClass.class) {
        ...
    }
}

ve

synchronized void foo() {
    ...
}

aynı gibi

void foo() {
    synchronized(this) {
        ...
    }
}

Kilidi gibi herhangi bir nesne kullanabilirsiniz. Eğer statik yöntemler alt kilitlemek isterseniz, yapabilirsiniz

class SomeClass {
    private static final Object LOCK_1 = new Object() {};
    private static final Object LOCK_2 = new Object() {};
    static void foo() {
        synchronized(LOCK_1) {...}
    }
    static void fee() {
        synchronized(LOCK_1) {...}
    }
    static void fie() {
        synchronized(LOCK_2) {...}
    }
    static void fo() {
        synchronized(LOCK_2) {...}
    }
}

(statik olmayan yöntemler için, kilitleri statik olmayan alanlar) yapmak isterim

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • martin shervington

    martin sherv

    7 EKİM 2011
  • mist64

    mist64

    30 Mayıs 2006