- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
简述 选中类,执行Ctrl + alt + U 查看类的继承示意图如下: public class CopyOnWriteArrayList implements List, RandomAc
我目前正在使用 ExecutorService 在 CopyOnWrite ArrayLists 中发送批处理字符串以进行并行处理,其中处理这些列表的 Runnable 任务需要遍历列表并对每个字符串
我正在使用一个集合 CopyOnWriteArrayList myCOW = new CopyOnWriteArrayList(); 其中 X 是一个可变对象。我从 Java Concurr
许多列表实现都有一个选项来指定集合的初始容量,为什么 CopyOnWriteArrayList 不允许这样做? 最佳答案 在传统的ArrayList中,容量是在后备数组中保留更多空间的提示,以便稍
根据 CopyOnWriteArrayList JavaDoc: A thread-safe variant of java.util.ArrayList in which all mutative
可能很简单,但我自己无法弄清楚。我有一些 Spring Boot WebSockets 实现示例,并且想要显示总 Activity session 。所以我创建了@Scheduled activeSe
我有以下案例, public class Test { private static final int MAX_NUMBER = 10_00_00; public static vo
这个问题已经有答案了: In what situations is the CopyOnWriteArrayList suitable? [duplicate] (2 个回答) 已关闭 5 年前。 我
我从一些教程中理解了这个概念,只要我知道一个线程何时迭代列表,就允许其他线程修改底层列表,我们不会得到 ConcurrentModificationException(CME),但在 ArrayLis
CopyOnWriteArrayList 被标记为可序列化。但它的内部状态是短暂的。任何人都可以回答我们试图在这种类型的列表中序列化什么。 /** The array, accessed only v
根据 CopyOnWritearrayList 的 javadoc : A thread-safe variant of ArrayList in which all mutative operati
我想使用可以被多线程代码不断访问的数据结构。请让我知道 java 中的任何数据结构,我可以在其中等待并使用通知选项。请看下面的代码,为什么CDRemove的run方法不打印所有值 public cla
我需要将一些对象存储到数据库中。 首先 我将它们存储在内存中(存储在集合中) 当其中一个正确存储在数据库中时,我会将其删除 所以, public class AuditService { pr
我试图将 CopyOnWriteArrayList 理解为我的代码: 我的代码是: public class AuditService { private CopyOnWriteArrayLi
我正在为 OCP 考试做一些练习。目前,我尝试打印 CopyOnWriteArrayList 的内容当使用多个线程时。根据文档,CopyOnWriteArrayList 的迭代器将 print the
拥有一个映射,按类型作为键保存同一事件的事件监听器列表, func_1() 将开始从映射中获取一种类型的监听器列表,并迭代该列表以处理每个监听器的事件。 当一个监听器完成处理后,它会要求将其从 map
我查看了 OpenJDK source code的CopyOnWriteArrayList似乎所有写操作都受到同一个锁的保护,而读操作则根本不 protected 。据我了解,在 JMM 下,对变量的
我想在内部了解并发修改异常是如何在并发集合中处理的,例如 ConcurrentHashMap 和 CopyOnWriteArrayList。 网上有很多博客建议使用这两种数据结构来避免并发修改异常。但
CopyOnWriteArrayList 的 Javadocs 说 A thread-safe variant of ArrayList in which all mutative operation
我查看了 OpenJDK source code的 CopyOnWriteArrayList似乎所有的写操作都受到同一个锁的保护,而读操作根本不 protected 。据我了解,在 JMM 下,对变量
我是一名优秀的程序员,十分优秀!