如何解决内部使用 LinkedHashMap 的 LRUCache 收缩时的 ConcurrentModificationException

问题描述 投票:0回答:1

我的任务是缩小 LRUCache 的大小,我为此编写了下面的代码。

protected void shrinkSize() {
    Iterator iter = fetch iterator
    while (iter.hasNext()) {
        if (size() > maxSize)
            iter.remove();
        else
            break;
    }
}

在 iter.remove() 处,我面临 ConcurrentModificationException,因为

get
对缓存的调用是并行发生的,这会改变 LRUcache 结构。

有办法解决这个问题吗?

java
1个回答
0
投票

可以尝试使用ConcurrentHashMap。或者创建公共资源,所有缓存操作都需要竞争资源才可以执行。

© www.soinside.com 2019 - 2024. All rights reserved.