If a method marked @Cacheable
takes 10 minutes to complete and two threads t1,t2 access the method.
t1 accesses at time 0 (cache method is now run for first time) t2 accesses at time t1+5mins
Does this mean that t2 will not access the data for approx 5 mins since t1 has already started the @Cacheable
operation and it's due to complete in 5 mins(as its been running for 5 mins) or will a new call to @Cacheable
be invoked by t2?
If the result of the first execution hasn't been cached, the second invocation will proceed.
You should understand that
@Cacheable
is centered around the content of the cache (and not specifically a thread's execution context [well, kind of; the cache still needs to be threadsafe]). On execution of a method, the cache is first checked to see if the key exists: if t1 is taking a while to complete, its result will not be cached therefore, concurrent executions will proceed without regard for t1's execution