gpt4 book ai didi

java - 我应该使用 HashTable 还是 HashMap 作为数据缓存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:17 24 4
gpt4 key购买 nike

我想在内存中创建一个数据缓存,这样我就不必每次都查询数据库。

字典最初是空的,当从中请求数据时会填充它。

为此,字典应该是 HashTable 还是 HashMap?

ConcurrentHashMap 和 synchronizedMap 哪个更好?

请就我的目的解释为什么 X 比 Y 好。我试图了解它们之间的区别。

//variable for locking purposes.
private String LOCK = new String("LOCK");
//HashMap or HashTable?
private HashMap<Long, Long> dictionary = new HashMap<Long, Long>();

public Long getValue(Long key) throws SQLException{
Long value = dictionary.get(key);
if(value != null)
return value ;
synchronized (LOCK) {
//Check again to make sure another thread hasn't populated the dictionary
key = dictionary.get(key);
if(key != null)
return value;
//Get value from database
//store in map for future use
dictionary.put(key, value);
}
return value;
}

由于我要多个线程同时读取数据,所以我没有同步整个方法。但是,向字典中插入数据应该是同步的。

我不会存储空值。

附言有人可以举例说明它们之间的区别吗?

最佳答案

使用ConcurrentHashMap

它提供标准 Map 接口(interface)的高性能并发实现。

为了提供高并发性,实现在内部管理自己的同步。因此,不可能从中排除并发 Activity ,锁定它只会减慢程序速度。

ConcurrentHashMap 针对检索操作进行了优化,例如 getConcurrentHashMap 扩展了 Map 并添加了几个方法,包括 putIfAbsent(key, value),它为如果不存在则返回一个键并返回与该键关联的先前值,或 null 如果没有。这使得实现线程安全映射变得容易。

除了提供出色的并发性外,ConcurrentHashMap 还非常快。除非你有令人信服的理由否则,请优先使用 ConcurrentHashMap 而不是 Collections.synchronizedMap哈希表。简单地用并发替换旧式同步映射 map 可以显着提高并发应用程序的性能。

有关更多信息,我建议阅读 Effective Java .

关于java - 我应该使用 HashTable 还是 HashMap 作为数据缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20356354/

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