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

  • International Secret Agents Concerts

    Internationa

    2 Aralık 2008
  • Jaclyn W

    Jaclyn W

    5 Mayıs 2006
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012