Heim  >  Artikel  >  Java  >  Analyse unsicherer Instanzen von Java HashMap

Analyse unsicherer Instanzen von Java HashMap

WBOY
WBOYnach vorne
2023-05-25 21:46:04857Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen