- SynchronizedMap 一次锁住整张表来保证线程安全,所以每次只能有一个线程来访问Map.
- ConcurrentHashMap 使用分段锁来保证在多线程下的性能。
- ConcurrentHashMap 中则是一次锁住一个桶。ConcurrentHashMap 默认将 hash 表分为 16 个桶,诸如get、put、remove 等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有 16 个写线程执行,并发性能的提升是显而易见的。
- 另外 ConcurrrentHashMap 使用一种不同的迭代方式。在这种迭代方式中,当 iterator 被创建后集合再发生改变就不再是抛出 ConcurrentModificationException,取而代之的是在改变 new 新的数据从而不影响原有的数据,iterator 完成后再将头指针替换为新的数据,这样 iterator 线程可以使用原来老的数据,而写线程也可以并发的完成改变。
65. SynchronizedMap 和 ConcurrentHashMap 有什么区别?
最新推荐文章于 2023-07-24 10:32:57 发布