ConcurrentHashMap和HashTable的区别
底层数据结构:ConcurrentHashMap在JDK1.7时,底层采用分段数组+链表形式;JDK1.8以后和HashMap一样采用数组+链表/红黑二叉树,HashTable和JDK1.8以前的HashMap一样的底层数据结构:数组+链表,数组是HashMap的主体,链表是为了解决哈希冲突问题;
实现线程安全方式:
1、在JDK1.7时,ConcurrentHashMap对数组进行了分端分割(Segment),每一把锁只锁容器中的一部分数据,多线程访问容器中不同数据段数据,不会发生锁竞争,提高并发访问效率;在JDK1.8时,摒弃分端分割(Segment)概念,直接采用数组+链表+红黑树的数据结构,并发控制采用synchronized和CAS操作,相当于是优化过的HashMap,JDK1.8中的Segment是简化过的属性,为了兼容旧版本;
2、HashTable(同一把锁):采用synchronized保证线程安全,效率低下;当多个线程访问同步方法时,会发生阻塞或轮询状态;当一个线程使用put()方法添加元素时,另一个线程不能使用put()方法添加元素,也不能使用get()方法,竞争会越来越激烈。
来源:CSDN
作者:爱敲代码的程序媛
链接:https://blog.csdn.net/qq_42334879/article/details/104186462