【发布时间】:2014-01-29 13:11:58
【问题描述】:
我有一个无法重现的奇怪异常(来自 bugsense):
java.lang.ArrayIndexOutOfBoundsException: length=0; index=1
at java.util.HashMap.addNewEntry(HashMap.java:476)
at java.util.HashMap.put(HashMap.java:408)
ConcurrentHashMap 上的 put 方法怎么会抛出 ArrayIndexOutOfBoundsException ?
(我也尝试使用 ConcurrentHashMap 但没有任何运气)
有什么想法吗?
编辑:
添加代码:
final Map<String, DataSource> dataSources = new ConcurrentHashMap<String, DataSource>();
public void setDataSource(@Nonnull String field, @Nullable DataSource source) {
// concurrent hash map doesnt allow null values
if (field != null) {
if (source != null) {
dataSources.put(field, source);
} else {
dataSources.remove(field);
}
}
}
多个线程同时调用该方法
谢谢。
【问题讨论】:
-
相关代码是什么?
-
您是否有多个线程访问地图?如果是这样,则可能存在一个潜在问题,即一个线程调整后备数组的大小,而另一个线程尝试放置一个新条目。
-
是的,那里有几个线程,但我也尝试使用
ConcurrentHashMap,但没有任何运气。 -
读者请注意stacktrace与OP后面添加的代码不匹配。这不是
ConcurrentHashMap中存在问题的证据。