ConcurrentHashMap和HashTable有什么区别
发布时间:2022-08-01 17:02:21
发布人:qyf
ConcurrentHashMap融合了Hashmap和Hashtable的优势,Hashmap是不同步的,但是单线程情况下效率高,Hashtable是同步的同步情况下保证程序执行的正确性。
但Hashtable每次同步执行的时候都要锁住整个结构,如下图:
ConcurrentHashMap锁的方式是细粒度的。ConcurrentHashMap将hash分为16个桶(默认值),诸如get、put、remove等常用操作只锁住当前需要用到的桶。
ConcurrentHashMap的读取并发,因为读取的大多数时候都没有锁定,所以读取操作几乎是完全的并发操作,只是在求size时才需要锁定整个hash。
而且在迭代时,ConcurrentHashMap使用了不同于传统集合的快速失败迭代器的另一种迭代方式,弱一致迭代器。在这种方式中,当iterator被创建后集合再发生改变就不会抛出ConcurrentModificationException,取而代之的是在改变时new新的数据而不是影响原来的数据,iterator完成后再讲头指针替代为新的数据,这样iterator时使用的是原来的数据。