SORU
19 ŞUBAT 2009, PERŞEMBE


Java senkronize blok vs Derlemeleri.synchronizedMap

Aşağıdaki kodu doğru synchronizedMap çağrıları senkronize etmek için ayarlanmış?

public class MyClass {
  private static Map<String, List<String>> synchronizedMap = Collections.synchronizedMap(new HashMap<String, List<String>>());

  public void doWork(String key) {
    List<String> values = null;
    while ((values = synchronizedMap.remove(key)) != null) {
      //do something with values
    }
  }

  public static void addToMap(String key, String value) {
    synchronized (synchronizedMap) {
      if (synchronizedMap.containsKey(key)) {
        synchronizedMap.get(key).add(value);
      }
      else {
        List<String> valuesList = new ArrayList<String>();
        valuesList.add(value);
        synchronizedMap.put(key, valuesList);
      }
    }
  }
}

Benim anlayış, ben gereken senkronize blok addToMap() önlemek için başka bir iş parçacığı arama remove() containsKey() Daha önce geçeceğim çağrısı put() ama yapmam gereken bir senkronize blok doWork() çünkü başka bir iş parçacığı giremezsiniz senkronize blok addToMap() önce remove() döner çünkü ben yarattım Harita ilk Collections.synchronizedMap(). Bu doğru mu? Daha iyi bir yolu bunu yapmak için vardır?

CEVAP
19 ŞUBAT 2009, PERŞEMBE


Collections.synchronizedMap() harita üzerinde çalıştırmak istediğiniz her bir atom operasyon senkronize olacağını garanti eder.

İki (veya daha fazla) koşu haritada işlemleri ancak, bir blok içinde senkronize olması gerekir. Evet çok doğru senkronize ediyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Distractify

    Distractify

    1 Aralık 2011
  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013