HashMap为什么不是线程安全的?
因为它的操作不是原子的,
- 即在多个线程同时进行读写操作时,可能会导致数据不一致性或抛出异常。
- 并发修改:
- 当一个线程进行写操作(插入、删除等)时,
- 另一个线程进行读操作,可能会导致读取到不一致的数据,
- 甚至抛出Concurrent ModificationException异常。
- 非原子性操作:HashMap的一些操作不是原子的,
- 例如,检查是否存在某个键
- 获取某个键对应的值等。
补充:为何这些操作不是原子的
get(key)方法和containsKey(key)方法
该方法也先计算哈希值,然后在对应的桶中查找键并返回其值。
如果在查找过程中,另一个线程修改了该键的值,get 可能返回旧值或新值,具体取决于线程的执行顺序。

浙公网安备 33010602011771号