2010-07-11 17 views
39

HashMap'i kullanıcıya döndüren bir uygulama yazıyorum. Kullanıcı bu MAP'ye referans alacaktır. Arka uçta, Harita'yı güncelleyecek bazı konular yayınlayacağım.Güvenli sayfa Hash?

Şimdiye kadar neler yaptım?


Bütün arka uç ipler yüzden MAP güncellemek için ortak bir kanalı paylaşan yaptık. Yani arka uçta eş zamanlı yazma işleminin bir sorun olmayacağından eminim. kullanıcı MAP güncelleştirmeye çalışır ve aynı anda MAP arka uç güncellenir ediliyorsa


Sorunlar ben


  1. yaşıyorum -> Eşzamanlı yazma işlemi sorunu.
  2. Eğer MAP'tan bir şey okumaya çalışırsanız ve eşzamanlı olarak MAP arka uçta -> eşzamanlı READ ve WRITE Operation probleminde güncellenmektedir.

Şimdiye kadar böyle bir sorunla karşılaşmadım, ama korkarım ki gelecekte yaşayacağım. Lütfen önerilerinizi verin. Ben kullanıyorum

ConcurrentHashMap<String, String>.

+0

teşekkürler. – user381878

cevap

51

ConcurrentHashMap kullanarak doğru yoldasınız. her bir nokta için: yöntemlerle putIfAbsent ve replace hem ÅŸan ve HashMap mevcut durumunu kontrol etme ve bir atomik işlem haline güncellenmesi birleştirmek dışarı

  1. kontrol edin.
  2. get yöntemi, dahili olarak eşitlenmez, ancak varolan anahtar için en son değeri döndürür (ConcurrentHashMap class Javadoc for discussion).

Collections.synchronizedMap gibi bir şey üzerinde ConcurrentHashMap faydası dahili olarak senkronize bir şekilde geleneksel Harita get ve put mantığı sağlamak putIfAbsent gibi kombine yöntemler oluşturmaktadır. Bu yöntemleri kullanın ve 'u, işe yaramayacağı için ConcurrentHashMap üzerinden kendi özel senkronizasyonunuzu sağlamaya çalışmayın. java.util.concurrent koleksiyonları dahili olarak senkronize edilir ve diğer threadlar nesneyi senkronize etme girişimlerine cevap vermez (ör. synchronize(myConcurrentHashMap){} diğer threadları engellemez).

+0

nasıl ConcurrentHashMap bir ConcurrentSkipListMap arasındaki fark nedir? – pratnala

7

Yan Not:

Sen tıklayın, bu Highly Scalable Java kütüphanesinin parçası Cliff tarafından kilit serbest karma tablo uygulaması içine bakmak isteyebilirsiniz

(İşte Google Talk tarafından var Cliff Bu kilit serbest karma hakkında tıklayın.)

0

ConcurrentHashMap, tanımladığınız senaryolarla ilgili sorunları önlemek için tasarlanmış ve uygulanmıştır. Endişelenecek bir şey yok.

kullanılabilseler arasında tam eşzamanlılık ve updates.updates için ayarlanabilir beklenen eşzamanlılık destekleyen bir karma tablosu. Hepinize 3'e

javadoc of ConcurrentHashMap