我的任务是缩小 LRUCache 的大小,我为此编写了下面的代码。
protected void shrinkSize() {
Iterator iter = fetch iterator
while (iter.hasNext()) {
if (size() > maxSize)
iter.remove();
else
break;
}
}
在 iter.remove() 处,我面临 ConcurrentModificationException,因为
get
对缓存的调用是并行发生的,这会改变 LRUcache 结构。
有办法解决这个问题吗?
可以尝试使用ConcurrentHashMap。或者创建公共资源,所有缓存操作都需要竞争资源才可以执行。