我正在尝试使用 ConcurrentHashMap 填充保存键/值的缓存。
我假设使用 aCopyOnWriteArrayList
来处理并发性,并且我将它作为我的键的值,但是我在下面的代码中遗漏了一些东西,并且当多个线程正在执行时它会覆盖它的值。
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 。