2014-09-04 203 views
-2

散列图不同步。假设我想在多线程环境中使用Hashmap。 hashmap的行为是什么?我们可以在多线程环境中使用Hashmap吗?

+0

它的行为将是未定义的... – 2014-09-04 06:40:52

+4

我的车没有刹车。如果我以100 KMPH驾驶它,会发生什么? – TheLostMind 2014-09-04 06:42:28

+0

行为将是一个HashMap。该地图不知道它是如何被访问的(同步与否)。这取决于**用例**。 – PeterMmm 2014-09-04 06:43:23

回答

1

并发修改会导致HashMap中出现不可预测的结果,您将遇到ConcurrentModificationException

请注意,此实现不同步。如果多个线程 同时访问哈希映射,并且至少一个线程在结构上修改映射,则它必须在外部同步。 (A 结构上的修改是,添加或删除一个或 多个映射的操作;仅改变与该一个 实例已经包含一个键相关联的值不被结构上的修改。)

Documentation

4

由于它不是同步的,它不是线程安全的。

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

+1

+1我同意你的看法。 – 2014-09-04 06:45:01

+0

-1:使用Collections.synchronizedMap()(实际上不是-1,但我不完全同意) – nablex 2014-09-04 06:51:04

+1

我发现总是误导:当然方法是同步的,并且有一些特殊的(putIfAbsent)。但是如果你在不同线程中执行多个操作(在一个块中){get();去掉(); put();}你仍然需要在外部同步。它并不总是用ConcurrentHashMap替代HashMap,你就完成了。 – PeterMmm 2014-09-04 06:52:13

相关问题