Evresel Java Ayarlar farklı
Farklı uygulamalar bir sürü var ve iş parçacığı için güvenli yollar oluşturmak için Java Ayarlar. Bazı örnekler vardır
2) Collections.synchronizedSet(Set set)
4) 10* *
5) Diğer Ayarlar bir şekilde benzer (4) oluşturdu
Bu örnekler Concurrency Pattern: Concurrent Set implementations in Java 6
Birisi sadece farkları, avantajları ve bu örnekler ve diğerleri dezavantajı açıklayabilir misiniz? Sorun anlayış ve Java Std Docs düz her şeyi tutmak yaşıyorum.
CEVAP
1) CopyOnWriteArraySet
oldukça basit bir uygulama - bu temelde bir dizideki öğelerin bir listesi vardır ve bu liste değiştirirken, bu diziye kopyalar. Şu anda çalışmakta olan tekrarlamalar ve diğer erişir eski dizi ile, okuyucular ve yazarlar eşitlenmesi kendisi yazma ihtiyacı olsa da) arasında eşitleme ihtiyaç kaçınarak devam edin. Normalde hızlı set işlemleri (özellikle contains()
) diziler doğrusal zamanda aranır gibi oldukça yavaş geldi.
(Yinelenen) sık sık ve nadiren değişti okunacak olan çok küçük ayarlar için bunu kullanın. (Hali dinleyici, bu kabul edilebilir bir örnek olabilir, ama bu gerçekten ayarlar ve sadece mesai bitiminden zaten kullanılmamalıdır.)
2) Collections.synchronizedSet
sadece orijinal set-block senkronize her yöntemi etrafında bir şal. Orijinal set doğrudan erişim olmamalıdır. Bu demektir iki yöntem ayarlayabilirsiniz yürütülür aynı anda (bir blok kadar diğer bitirir) - bu iş parçacığı için güvenli, ama henüz eşzamanlılık eğer birden çok iş parçacığı gerçekten kullanarak ayarlayın. Eğer yineleyici kullanırsanız, genellikle hala yineleyici aramalar arasında set değiştirirken ConcurrentModificationExceptions önlemek için dışarıdan eşitlemek gerekir. Performansı orijinal set (ama bazı eşitleme havai, ve eğer kullanılan aynı anda engelleme ile) performansı nasıl olacak.
Sadece düşük eşzamanlılık ve tüm değişiklikleri hemen başka bir iş için görünür olduğundan emin olmak istiyorsanız, bu kullanın.
3) ConcurrentSkipListSet
SortedSet
eşzamanlı uygulanması, O(log n) en temel işlemler. Eşzamanlı yineleyici beri/yineleme olabilir veya değişiklikler hakkında bilgi verebilir olmayan ve/yineleme kaldırma okuma, oluşturulmuş ekleyerek sağlar. Toplu işlemleri birden fazla tek çağırır ve atomik - başka bir iş parçacığı sadece bazıları gözlemek değil.
Açıkçası eğer öğeleri bazı toplam sipariş varsa, sadece bunu kullanabilirsiniz. Bu çok büyük kümeleri için yüksek eşzamanlılık durumlar için ideal bir aday, (O(log n)) gibi görünüyor.
4) ConcurrentHashMap
(ve türetilmiş): Burada en temel seçenekleri (ortalama, eğer iyi ve hızlı hashCode()
) O(1) (ama olabilir dejenere O(n)), gibi HashMap/HashSet. Orada sınırlı bir eşzamanlılık için yazma (tablo bölümlenmiş ve yazma erişimi olacak senkronize üzerinde gerekli bölüm), süre okuma erişimi tamamen eşzamanlı kendisini ve yazma konuları (ama belki henüz görmek sonuçlarının değişiklikler şu anda yazılıyor). Yineleyici olabilir veya oluşturulduğundan bu yana bir değişiklik göremeyebilirsiniz, ve toplu işlemler değil atom vardır.
Yeniden boyutlandırma yavaş (HashMap/HashSet gibi), yaratılış hakkında gerekli boyutunu tahmin ederek bunu önlemek için deneyin böylece.
Büyük kümeleri, (ve hızlı) iyi bir karma işlev ve kümesi boyutunu tahmin edebilir ve harita oluşturmadan önce eşzamanlılık gerektiğinde bunu kullanın.
5) diğer eşzamanlı harita uygulamaları burada kullanın verebilecek var mı?
Java ile farklı sonuçlar's digest...
Neden Java bize bir isim dosya adından...
Nasıl bir Java HashMap aynı karma kodu...
Java nasıl bir değişken kendisinden fa...
Java'da üçlü operatör sadece 7 - Java ...