SORU
6 Ocak 2009, Salı


Java kritik bölümlerde, senkronize ne yapmalıyım?

Java, kod, kritik bölümler ilan deyimsel yolu şudur:

private void doSomething() {
  // thread-safe code
  synchronized(this) {
    // thread-unsafe code
  }
  // thread-safe code
}

Neredeyse tüm blok this, senkronize ama bunun için özel bir sebep var mı? Başka olasılıklar var mı? Üzerinde eşitlemek için hangi nesne üzerinde herhangi bir iyi yöntemler var mı? (Object? özel örnekler) gibi

CEVAP
13 Ocak 2009, Salı


Önceki answerers belirttiği gibi, en dar kapsamlı (başka bir deyişle, bu işten paçayı nasıl sıyıracağını en kısıtlayıcı kapsam seçin ve kullanın.) bir nesne üzerinde eşitlemek için bir uygulamadır Özellikle, this senkronizasyon sınıf kullanıcılar kilit sağlamasına izin vermek için düşünmüyorsanız iyi bir fikir değil.

Özellikle çirkin bir durum varsa java.lang.String üzerinde eşitlemek için seçerseniz, yine de ortaya çıkar. Dizeleri (ve pratikte her zaman neredeyse) staj yaptım. Bu eşit her dizesi - içerik anlamına gelirTÜM JVM- perde arkasında aynı dize olduğu ortaya çıkıyor. Eğer herhangi bir Dize üzerinde eşitlemek için, başka bir (tamamen) farklı ayrıca aynı içeriğe sahip bir Dize üzerinde kilitler kod bölümü, aslında kod olarak kilitlenir anlamına gelir.

Ben bir ara bir sorun giderme çıkmaz bir üretim sistemi ve (çok acı) takip kilitlenme için iki tamamen farklı açık kaynak paketleri her senkronize bir örneğinin Dize olan içeriği hem de vardı "LOCK".

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • theatre2film

    theatre2film

    12 NİSAN 2006