我正在维护使用ConcurrentHashMap.
其他方法中有add和remove的操作。
在下面的代码中,在从地图中收集了一些值后的某个时刻,它NullPointerException在执行时抛出synchronize(value)。
public class MyClass{
private final Map<MyObj, Map<String, List<String>>> conMap = new ConcurrentHashMap<>();
//...
public void doSomthing((MyObj id){
List<Map<String, List<String>>> mapsList = new LinkedList<>();
for(MyObj objId: conMap.keySet()){
if(objId.key1.equals(id.key1)){
mapsList.add(conMap.get(objId));
}
}
for(Map<String, List<String>> map: mapsList){
synchronized(map){ // <-- NullPointerException here
//...
}
}
//...
}
我有一种感觉,也许在第一个循环的迭代过程中,记录被删除了。当行:
mapsList.add(conMap.get(objId));
正在执行,objId不再存在并mapsList添加 null,结果,在第二个循环期间NullPoinerException被抛出。
还有其他原因可以得到这个例外吗?
慕码人2483693
相关分类