gpt4 book ai didi

java - 并发 hashmap 和 copyonwritearraylist

转载 作者:行者123 更新时间:2023-12-02 06:46:23 25 4
gpt4 key购买 nike

我正在尝试使用 ConcurrentHashMap 填充保存键/值的缓存。

我假设使用 CopyOnWriteArrayList 负责并发性,并且我将其作为我的键的值,但是我在下面的代码中遗漏了一些内容,并且当多个线程运行时它会覆盖它的值正在执行。

if (testMap.get(id) == null) {
CopyOnWriteArrayList<String> copyArr = new CopyOnWriteArrayList<String>();
copyArr.add("Add Value");
testMap().putIfAbsent(id, copyArr);
} else {
testMap.put(id,testMap.get().add("Append Value"));
}

如何保护从多个线程创建 CopyOnWriteArrayList 的代码。

这是根据以下建议修改的代码版本。

CopyOnWriteArrayList<Subscriber> subscriberArr =  CacheUtils.getSubscriberMap().get(syncDet.getCardNumber());

if (subscriberArr == null) {

subscriberArr = new CopyOnWriteArrayList<Subscriber>();
CopyOnWriteArrayList<Subscriber> refArr =

cacheUtils.getSubscriberMap().putIfAbsent(syncDet.getCardNumber(), subscriberArr);

if (refArr != null) {
subscriberArr = refArr;
}

}
subscriberArr.add(syncDet.getSubScriber());

在迭代订阅者映射时,我没有看到值对象。大小为 0 。

最佳答案

您需要首先检索适当的列表,然后填充它。像这样的东西:

List<String> copyArr = testMap.get(id);
if (copyArr == null) {
copyArr = new CopyOnWriteArrayList<String>();
List<String> inMap = testMap.putIfAbsent(id, copyArr);
if (inMap != null) copyArr = inMap; // already in map
}
copyArr.add("Add Value");

这样,如果 map 中还没有新列表,您只需在其中添加一个新列表,然后将您的项目添加到已添加到 map 中的任何列表中。

关于java - 并发 hashmap 和 copyonwritearraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18605876/

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