gpt4 book ai didi

java - 可重载缓存

转载 作者:行者123 更新时间:2023-11-29 08:19:13 26 4
gpt4 key购买 nike

我需要在 servlet 的内存中存储一​​个查找映射。 map 应该从文件中加载,每当文件更新(不是很频繁)时, map 应该在执行查找的同一个线程中重新加载。

但我不确定如何以线程安全的方式实现此功能。我想确保重新加载不会发生超过一次。

public class LookupTable
{

private File file;
private long mapLastUpdate;
private Map<String, String> map;

public String getValue(String key)
{
long fileLastUpdate = file.lastModified();
if (fileLastUpdate > mapLastUpdate)
{
// Only the first thread should run the code in the synchronized block.
// The other threads will wait until it is finished. Then skip it.

synchronized (this)
{
Map newMap = loadMap();
this.map = newMap;
this.mapLastUpdate = fileLastUpdate;
}
}

return map.get(key);
}

private Map<String, String> loadMap()
{
// Load map from file.
return null;
}
}

如果有人对已经解决此问题的外部库有任何建议,那也可以。我快速浏览了一些缓存库,但找不到我需要的。

谢谢

最佳答案

我建议您使用 imcache .请按如下方式使用缓存加载器构建并发缓存,

Cache<String,LookupTable> lookupTableCache = CacheBuilder.
concurrentHeapCache().cacheLoader(new CacheLoader<String, LookupTable>() {
public LookupTable load(String key) {
//code to load item from file.
}
}).build();

关于java - 可重载缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com