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

  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • New Challenger - Game Reviews

    New Challeng

    20 Temmuz 2006
  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006