Изначальная история не настолько прямолинейна. Я её упростил малясь. Ты спрашиваешь - как так вышло? Представь что две этих лямбды - это некие вычисления, которые должны быть мемоизированны. В спринге для целей кеширования есть контракт Cache с методом get(ключ, лямбда). Лямбда вызывается если по ключу в кеше ничего нет. Одна из имплементаций этого кеша - Concurrentmapcache, по умолчанию использующая concurrenthashmap в качестве стореджа. Ну а представить себе две вложенные друг в друга и кешируемые лямбды не так и сложно.
И чтоб впороться, ключ необязательно должен быть одинаковым. Достаточно того, чтоб два ключа залочились на одном бакете.