对非同步的并发更新HashMap
显然会导致活锁或其他数据损坏;为避免这种情况,应使用并发版本或实施同步机制。
对HashMap.get()的并发调用可以改变 HashMap 的状态,比如重新散列吗?
更新:
一些评论者想知道这个问题的实际方面,除了吹毛求疵的数据结构行为的理论乐趣。
如果get()
不改变状态HashMap
(并且不能因为另一个原因导致活锁),那么单个线程可以提前创建一个HashMap,然后多个线程可以同时读取它。如果并发读取不安全,我们需要ConcurrentHashMap
对每个多线程访问,无论类型如何。