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

  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011
  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • the one am radio

    the one am r

    6 Mayıs 2006