HashMap为什么不是线程安全的?

因为它的操作不是原子的,

  • 即在多个线程同时进行读写操作时,可能会导致数据不一致性或抛出异常。
  1. 并发修改:
  • 当一个线程进行写操作(插入、删除等)时,
  • 另一个线程进行读操作,可能会导致读取到不一致的数据,
  • 甚至抛出Concurrent ModificationException异常。
  1. 非原子性操作:HashMap的一些操作不是原子的,
  • 例如,检查是否存在某个键
  • 获取某个键对应的值等。

补充:为何这些操作不是原子的

get(key)方法和containsKey(key)方法
该方法也先计算哈希值,然后在对应的桶中查找键并返回其值。

如果在查找过程中,另一个线程修改了该键的值,get 可能返回旧值或新值,具体取决于线程的执行顺序。

posted @ 2025-05-16 12:20  kuki'  阅读(29)  评论(0)    收藏  举报