3 java中一系列扩容机制小总结

java中涉及到扩容问题的类主要有:

类名默认初始值扩容大小线程安全
ArrayList101.5*n不安全
Vector102*n安全
Hashtable112*n+1安全
HashMap162*n不安全
HashSet162*n不安全
StringBuffer162*n+2安全
StringBuilder162*n+2不安全

 

 

 

 

 

 

 

 

 

ConcurrentHashMap 是 Java 的一个线程安全的哈希表实现,它支持高并发的读写操作。在并发环境下,ConcurrentHashMap 的扩容机制是通过分段锁(Segment)来实现的。 ConcurrentHashMap 内部被划分为一系列的段(Segment),每个段都是一个独立的哈希表(HashEntry[]),并且每个段都拥有自己的锁。当需要扩容时,只会对其一个段进行扩容操作,而其他段仍然可以被并发地访问。 具体的扩容过程如下: 1. 首先,ConcurrentHashMap 会创建一个新的哈希表,大小是当前表的两倍。 2. 然后,它会遍历每个段的链表,将节点(Entry)重新分配到新的哈希表。这个过程是并发进行的,因为每个段都有自己的锁,所以其他段仍然可以被并发地访问。 3. 在节点重新分配过程,如果两个节点哈希到了新表的同一个位置,会采用链表的方式进行存储。如果链表长度超过了一定阈值(默认是8),就会触发红黑树(TreeBin)的转化操作,将链表转化为红黑树,提高查询效率。 4. 最后,当所有节点都被重新分配完毕后,所有的段都会指向新的哈希表。这个过程是原子性的,因为在修改段指向的同时,其他线程仍然可以读取旧的哈希表进行操作。 这种分段锁的扩容机制有效地减少了并发写操作的竞争,并提高了并发读操作的性能。同时,它还保证了并发访问时的线程安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值