SORU
14 Ocak 2009, ÇARŞAMBA


Senkronize(bu) Java önlemek?

Bu YÜZDEN bir soru hakkında Java senkronize açılır zaman, bazı insanlar synchronized(this) Kaçınılması gerektiğine işaret etmeye istekli çok. Bunun yerine, iddia, özel bir başvuru üzerinde bir kilit tercih edilmelidir.

Belirli bazı nedenleri vardır:

Diğer insanlar, ben dahil, synchronized(this) Bir sürü (aynı zamanda Java kitaplıkları) kullanılır, güvenli ve iyi anlaşılan bir deyim olduğunu savunuyorlar. Bir hata var, çünkü kaçınılmalıdır değil ve çok parçalı programda ne olup bittiğini en ufak bir fikrin bile yok. Diğer bir deyişle: Eğer Uygulanabilir ise, o zaman kullanın.

this kilit önleme synchronized(this) da iş yapacağı zaman tercih edilir gerçek dünyadaki bazı örnekler (falanca şeyler görmek ilgileniyorum.

Bu nedenle:her zaman synchronized(this) önlemek ve özel bir başvuru üzerinde bir kilit ile değiştirmek gerekir?

< / ^ hr .

Biraz daha fazla bilgi (cevap verilmiştir güncellenir)

  • örnek eşitleme bahsediyoruz
  • synchronized(this) örtülü (yöntemler senkronize) ve açık hem de form olarak kabul edilir
  • eğer alıntı Bloch veya diğer yetkililer konu, bırakmayın parçaları yok gibi (örneğin; Etkin Java, madde Parçacığı Güvenliği: "Genellikle bu kilidi örneği kendisi, ama istisnalar vardır.")
  • eğer synchronized(this) sağlar daha başka kilitleme parçalı yapı, synchronized(this) konumuz bu değil bu yüzden geçerli değildir

CEVAP
14 Ocak 2009, ÇARŞAMBA


Her noktası ayrı ayrı ele alacağız.

  1. Bazı kötü kod kilidi (bu çok popüler biri, aynı zamanda bir var çalmak olabilir "yanlışlıkla" varyant)

    Hakkında daha fazla endişeliyimyanlışlıkla. Tutarı ne this bu sınıf' arayüzü maruz kalan, ve belgelenmiş olmalıdır. bir parçası olmasıdır Bazen kilidini kullanmak için başka bir kod becerisi istenen. Bu Collections.synchronizedMap gibi şeylerin gerçek (javadoc bakın).

    2.

Aynı sınıf içindeki tüm senkronize yöntemleri aynı kullanın verimi azaltan kilit

Bu aşırı basit düşünme, sadece synchronized(this) kurtulmak sorunu çözmez. Performans için uygun eşitleme daha düşünce alır.

3=başlangıç
  • (Gereksiz yere) çok fazla bilgi ifşa ederim

    Bu #1 çeşididir. synchronized(this) kullanım arayüzü bir parçasıdır. Eğer bu açığa ihtiyacı/istemiyorsan eğer, sakın yapma.

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

    YORUMLAR

    SPONSOR VİDEO

    Rastgele Yazarlar

    • David Wills

      David Wills

      31 Aralık 2007
    • Apple&Tech Reviews & Giveaways

      Apple&Tech R

      12 Temmuz 2008
    • Sergio Fernandez

      Sergio Ferna

      1 EKİM 2009