SummerXinBing / xiabing_wuji

学习仓库,用此来驱动自己
Apache License 2.0
0 stars 0 forks source link

JUC 并发工具类 #16

Open SummerXinBing opened 6 months ago

SummerXinBing commented 5 months ago

HashMap

jdk1.7 基于哈希表实现 jdk1.8 数组+链表+红黑树;HashMap的性能是在于初始容量和负载因子,初始容量是16 解决哈希冲突的方式:开发地址法 冲突链表法 自动扩容机制:resize(),当执行put()方法的时候,会先判断当前剩余容量,如果剩余容量 < 初始容量 * 负载因子,就会触发自动扩容

HashTable

和HashMap类似,但是是线程安全的,但是是遗留类,不使用,考虑使用CurrentHashMap;使用了Synchronzied来修饰put()保证了线程安全;

ConcurrentHashMap

jdk1.7 使用分段锁 本质上是一个segment数组,使用自旋锁锁住每一段,扩容只能扩容每一segment中的entry;最大的并发度受segment的数量限制; jdk1.8 数组+红黑树+链表+CAS 扩容:数组扩容,扩容到原来的两倍,且需要有数据迁移的过程;还有就是链表转红黑树;