Перефразировка происходит только при изменении размера таблицы ha sh.
Если get()
вызывается во время операции изменения размера, то put()
не имеет еще не завершено, поэтому get()
не увидит новое значение, которое должно быть.
Помните, что таблицы хранятся в массиве, а массивы имеют фиксированный размер, поэтому измените размер означает совершенно новый стол ha sh. Эта новая таблица ha sh недоступна другим потокам до тех пор, пока не будет выполнено изменение размера. До тех пор все остальные потоки, вызывающие get()
, будут видеть старую таблицу ha sh.