被接受的答案(推荐在锁外阅读)是非常糟糕的建议,自2008年以来一直在实施。如果缓存使用并发字典,则可能有效,但它本身对于读取有一个锁。 在锁外读取意味着其他线程可能会在读取过程中修改缓存。这意味着读取可能不一致。 例如,根据缓存的实现方式(可能是一个内部结构未知的字典),该项可以在缓存中检查并找到,在缓存的基础数组的某个索引处,然后另一个线程可以修改缓存,使得基础数组中的项目不再按相同顺序排列,然后从缓存实际读取的内容可能来自不同的索引/地址。 另一种情况是读取可能来自现在超出基础数组的索引(因为已删除项目),因此您可能会遇到异常。