相关疑难解决方法(0)

java中一个对象的线程安全缓存

假设我们的应用程序中有一个CountryList对象,它应返回国家/地区列表.加载国家是一项繁重的操作,因此应该缓存该列表.

其他要求:

  • CountryList应该是线程安全的
  • CountryList应加载延迟(仅按需)
  • CountryList应支持缓存失效
  • 考虑到缓存很少会失效,应优化CountryList

我提出了以下解决方案:

public class CountryList {
    private static final Object ONE = new Integer(1);

    // MapMaker is from Google Collections Library    
    private Map<Object, List<String>> cache = new MapMaker()
        .initialCapacity(1)
        .makeComputingMap(
            new Function<Object, List<String>>() {
                @Override
                public List<String> apply(Object from) {
                    return loadCountryList();
                }
            });

    private List<String> loadCountryList() {
        // HEAVY OPERATION TO LOAD DATA
    }

    public List<String> list() {
        return cache.get(ONE);
    }

    public void invalidateCache() {
        cache.remove(ONE);
    }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看待这件事?你觉得它有什么坏处吗?还有其他办法吗?我怎样才能让它变得更好?我应该在这种情况下寻找另一种解决方案吗?

谢谢.

java caching lazy-loading

37
推荐指数
3
解决办法
2万
查看次数

标签 统计

caching ×1

java ×1

lazy-loading ×1