Seems like making this blocking is actually better here.  It means there are a lot fewer calls to an ExecutorService on the most used path.

Since most mappings will be in the cache keeping it blocking means that only one future will ever be created on hits.