Prinzipielle Analyse
1. In HashMap ist der put()-Methodenzeilencode modCount++ auf den ersten Blick threadunsicher.
2. Der Wert ist während des Erweiterungsprozesses nicht korrekt. Die Erweiterung von HashMap erstellt ein neues leeres Array und füllt die alten Elemente in das neue Array kann einen Nullwert erhalten.
Instanz
public class HashMapNotSafe { public static void main(String[] args) { final Map<Integer, String> map = new HashMap<>(); final Integer targetKey = 65535; // 65 535 final String targetValue = "v"; map.put(targetKey, targetValue); new Thread(() -> { IntStream.range(0, targetKey).forEach(key -> map.put(key, "someValue")); }).start(); while (true) { if (null == map.get(targetKey)) { throw new RuntimeException("HashMap is not thread safe."); } } } }
Das obige ist der detaillierte Inhalt vonAnalyse unsicherer Instanzen von Java HashMap. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!