Hash是线程安全的吗?哪些是线程安全的容器?

不是。如果多个线程同时访问一个哈希映射。而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用collections.synchronizedMap的map方法来包装该映射。最好在创建时完成这一动作,以防止对应社进行意外的非同步访问。在Hashmap中做put操作的时候会调用用到以上的方法。现在,假如A线程和B线程同时对一个数组位置调用addEntry,两个线程会同时得到现在的头节点,然后A写入新的头节点之后,B也写入新的头节点,那 B 的写入操作就会覆盖 A 的写入操作造成 A 的写入操作丢失。

线程安全的容器:Vector、HashTable、ConcurrentHashMap、CopyOnWriteArrayList

发布了72 篇原创文章 · 获赞 2 · 访问量 1046

猜你喜欢

转载自blog.csdn.net/baidu_41592938/article/details/104348956