SORU
16 Temmuz 2011, CUMARTESİ


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

1) CopyOnWriteArraySet

2) Collections.synchronizedSet(Set set)

3) ConcurrentSkipListSet

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
16 Temmuz 2011, CUMARTESİ


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ı?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013