我的用例是:
我需要缓存一组字符串以进行频繁的读访问。缓存由守护程序线程定期更新。此外,缓存元素永远不会单独更新,它总是
set.clear();set.addAll(List)我目前使用的
HashSet
受{{1}保护}}。有没有更好的方法呢?
答案 0 :(得分:2)
一个选项是易变集:
private volatile Set<String> set = new HashSet<> ();
public void update() {
Set<String> newSet = getNewData();
set = newSet;
}
这是线程安全的(如果你不让其他代码访问集合本身)并且不需要锁定。一个缺点是你将两个集合都保存在内存中直到下一个GC(不确定每个条目使用了多少空间 - 要测试)。