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

  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Moto Journal

    Moto Journal

    28 Mayıs 2007
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007