【发布时间】:2012-11-02 16:58:30
【问题描述】:
对非同步HashMap 的并发更新显然会导致活锁或其他数据损坏;为避免这种情况,应使用并发版本或实施同步机制。
并发调用HashMap.get()可以改变HashMap的状态,比如重新散列吗?
更新:
除了吹毛求疵的数据结构行为的理论乐趣之外,一些评论者想知道这个问题的实际方面。
如果get() 没有改变HashMap 的状态(并且不能因为另一个原因导致活锁),那么单个线程可以提前创建一个HashMap,然后多个线程可以同时读取它.如果并发读取不安全,我们需要 ConcurrentHashMap 用于每个多线程访问,无论类型如何。
【问题讨论】:
-
为什么这对你很重要?
-
我心爱的数据结构的一般知识。
标签: java hashmap hashtable state livelock