Может ли размер Java HashMap () быть не синхронизированным с его фактическим размер записей?

У меня есть Java HashMap с именем statusCountMap.
Вызов size () приводит к 30.
Но если посчитать записи вручную, получится 31
Это один из моих модульных тестов TestNG. Приведенные ниже результаты взяты из окна Display Eclipse (введите код -> выделите -> нажмите Display Result of Evaluating Selected Text).

statusCountMap.size()
     (int) 30
statusCountMap.keySet().size()
     (int) 30
statusCountMap.values().size()
     (int) 30
statusCountMap
     (java.util.HashMap) {40534-INACTIVE=2, 40526-INACTIVE=1, 40528-INACTIVE=1, 40492-INACTIVE=3, 40492-TOTAL=4, 40513-TOTAL=6, 40532-DRAFT=4, 40524-TOTAL=7, 40526-DRAFT=2, 40528-ACTIVE=1, 40524-DRAFT=2, 40515-ACTIVE=1, 40513-DRAFT=4, 40534-DRAFT=1, 40514-TOTAL=3, 40529-DRAFT=4, 40515-TOTAL=3, 40492-ACTIVE=1, 40528-TOTAL=4, 40514-DRAFT=2, 40526-TOTAL=3, 40524-INACTIVE=2, 40515-DRAFT=2, 40514-ACTIVE=1, 40534-TOTAL=3, 40513-ACTIVE=2, 40528-DRAFT=2, 40532-TOTAL=4, 40524-ACTIVE=3, 40529-ACTIVE=1, 40529-TOTAL=5}
statusCountMap.entrySet().size()
     (int) 30

Что дает? Кто-нибудь сталкивался с этим?
Я почти уверен, что statusCountMap на данный момент не изменяется.
Есть 2 метода (назовем их methodA и methodB), которые изменяют statusCountMap одновременно , многократно вызывая incrementCountInMap.

private void incrementCountInMap(Map map, Long id, String qualifier) {
    String key = id + "-" + qualifier;
    if (map.get(key) == null) {
        map.put(key, 0);
    }
    synchronized (map) {
        map.put(key, map.get(key).intValue() + 1);
    }
}

methodD - вот где я получаю проблему. methodD имеет TestNG @dependsOnMethods = {"methodA", "methodB"}, поэтому, когда methodD выполняется, statusCountMap уже почти статичен. Я упоминаю об этом, потому что это может быть ошибка в TestNG.
Я использую Sun JDK 1.6.0_24. TestNG - это testng-5.9-jdk15.jar

Хммм ... после перечитывания моего поста, могло ли это быть из-за одновременного выполнения карты вне синхронизированного блока map.get (key) == null & map.put ( key, 0), вызывающего эту проблему?

8
задан trix 12 March 2011 в 15:19
поделиться