HashMap如链接文档中明确指出的那样,它不是线程安全的。您正在提供一个很好的例子说明为什么会这样。是的,您放入重复的密钥是因为
put不检查是否有另一个线程正在放入相同的密钥。这就是说不保证线程安全。
检索行为是不确定的,因此它可以返回此时所需的任何值。它可能非常依赖于实现,平台,甚至与时序有关。
有几种解决方法。在文档中建议的一个是
Map m = Collections.synchronizedMap(new HashMap(...));
另一个选择是使用
ConcurrentHashMap,它是专门为此目的而设计的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)