protected void loadAndReplace ( K key ) { Entry e ; for ( ; ; ) { e = lookupOrNewEntry ( key ) ; synchronized ( e ) { e . waitForProcessing ( ) ; if ( e . isGone ( ) ) { metrics . goneSpin ( ) ; continue ; } e . startProcessing ( Entry . ProcessingState . LOAD ) ; break ; } } boolean _finished = false ; try { load ( e ) ; _finished = true ; } finally { e . ensureAbort ( _finished ) ; } }
Always fetch the value from the source . That is a copy of getEntryInternal without freshness checks .