Когда была выпущена Java 1.5, в JMM было условие, согласно которому HashEntry может быть частично инициализирован.То есть, когда поток помещается в карту, HashEntry создается и назначается в качестве ссылки либо на ведро, либо на член коллизии.В то время значение записи, возможно, не было назначено для просмотра другими потоками.
CHM предполагает, что если запись не пуста, то значение не должно быть пустым, поэтому readValueUnderLock был введен как отказоустойчивый
Я спросил Д.Л. об этой точной ситуации, и он сказал, что, несмотря на возможность этого, это никогда не должно происходить.Он также сказал, что с версии 1.6 такой проблемы не будет.