Java 我们可以在多线程环境中使用Hashmap吗?

Java 我们可以在多线程环境中使用Hashmap吗?,java,multithreading,Java,Multithreading,Hashmap未同步。假设我想在多线程环境中使用Hashmap。hashmap的行为是什么?并发修改将导致不可预测的inhashmap输出,您将体验到ConcurrentModificationException 请注意,此实现是不同步的。如果有多个线程 同时访问哈希映射,并至少访问其中一个线程 如果从结构上修改贴图,则必须从外部对其进行同步。(一) 结构修改是添加或删除一个或多个结构的任何操作 更多映射;只需更改与 实例已包含的不是结构修改。) 因为它没有同步,所以它不是线程安全的 如果您正在

Hashmap未同步。假设我想在多线程环境中使用Hashmap。hashmap的行为是什么?

并发修改将导致不可预测的in
hashmap
输出,您将体验到
ConcurrentModificationException

请注意,此实现是不同步的。如果有多个线程 同时访问哈希映射,并至少访问其中一个线程 如果从结构上修改贴图,则必须从外部对其进行同步。(一) 结构修改是添加或删除一个或多个结构的任何操作 更多映射;只需更改与 实例已包含的不是结构修改。)


因为它没有同步,所以它不是线程安全的


如果您正在寻找同步,请使用。

它的行为将是未定义的…我的车没有刹车。如果我以每小时100公里的速度驾驶它,会发生什么?其行为将是哈希映射。地图不知道如何访问(是否同步)。这完全取决于用例。有一篇博客文章详细解释了使用它的人发生了什么。结果是与预期挂起的线程发生死锁。但是再也找不到链接了。简而言之:使用Collections.synchronizedMap(newhashMap());这取决于您如何使用
HashMap
、正在使用的
HashMap
的实现、它包含的对象类型、计算机和操作系统的类型以及随机因素。可以编写线程安全的代码,使用本身不是线程安全的数据结构。你的问题缺乏可回答的细节。+1我同意你的观点。-1:使用Collections.synchronizedMap()(实际上不是-1,但我并不完全同意)我发现这总是误导:当然方法是同步的,还有一些特殊的(putIfAbsent)。但是,如果您在不同的线程{get();remove();put();}中执行多个操作(在一个块中),您可能仍然需要进行外部同步。并不总是用ConcurrentHashMap替换HashMap,您就完成了。@nablex为什么我要写额外的代码行??设计师已经为我编写了代码:)。最好的部分是它没有任何错误。@petermm我同意你的观点,但这取决于用法(参见示例)。