
Java基础 HashMap之线程安全(ConcurrentHashMap)(三)
HashMap线程安全吗当然不安全了原因如下put方法中的非原子性操作扩容时的非原子性操作put方法中的非原子性操作在HashMap的put方法中会涉及到多个步骤包括计算键的哈希值找到对应的桶处理哈希冲突等这些步骤在没有外部同步的情况下不是原子的所以在多线程并发时可能会出现问题假设有两个线程A和B同时尝试put同一个键到HashMap中线程A计算了哈希值并找到了对应的桶线程B在线程A还未完成put操作时也计算了相同的哈希值并尝试修改同一个桶如果线程A在线程B修改桶之后才完成put操作那么线程B的修改可能会被线程A的操作覆盖从而导致数据丢失uploadfaffdaabddpng扩容时的非原子性操