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

  • metagamers

    metagamers

    13 Mayıs 2006
  • sghaff1

    sghaff1

    23 Mart 2009
  • VOICE TV

    VOICE TV

    2 Aralık 2010