在jdk8中HashTableConcurrentHashMap的区别

278 阅读8分钟
在jdk8中HashTable与ConcurrentHashMap的区别

HashTable与ConcurrentHashMap虽然都实现了map,但是实现方式的差异非常大,我们为什么把它们拿出来比较,因为都实现了map,而且都是同步集合,就把他们拿出来比较一下,比较实现的细节没有多大的意义,我们只在设计的方法与效率上做个比较:

①HashTable采用的是同步方法,ConcurrentHashMap是用cas+分区同步代码块,我们先来看看两者实现put的代码,HashTable采用synchronized作用在方法上,而ConcurrentHashMap分两步走,如果当前hash后的位置是空的,采用cas的方式设置,如果不是空,采用同步代码块的方式,同步的对象是当前数组的位置的节点,如果是链表,就是链表的第一个节点,如果是红黑树,那么就是红黑树的根节点。

可以看出,实现的同步方式不一样,性能上差距很大,

ConcurrentHashMap支持多个线程并发的操作map,相同的hash值才会做同步操作,在高并发的情况下ConcurrentHashMap要比HashTable的性能高很多。

②TashTable采用数组+列表的数组结果存储,如果是列表,插入到链表的最前面,JDK8中ConcurrentHashMap是采用数组+链表+红黑树的方式,如果是链表,插入到链表的末尾

看视频:www.ixigua.com/68738135572…