Java中线程安全的集合

使用Collections包装线程不安全的类,使其成为线程安全的类,使用的是sync,效率并无实质提升:

concurrent包下的线程安全集合:blocking,copyonwrite,concurrent。

 

coucurrentMap每个方法都是原子的,但是几个方法的组合并不是原子的。concurrentMap是细粒度的锁。普通的HashMap在扩容的时候会有并发死链的问题。

ConcurrentHashMap的原理:‘

 ConcurrentHashMap在扩容时保证线程安全:

 

在扩容过程中,处理完毕的链表头节点置为fnode,表明此链表已经处理完毕。其他线程来get,则会到新的线程中去get。

 

TreeBin是红黑树的头结点,TreeNode是红黑树的树节点。

整个get流程:

hash为负数则去新的扩容的HashMap查找元素。

ConcurrentHashMap不允许有空的键值,put的过程中,只有发生下标冲突,才会使用sync,而且锁的是桶的头节点。

初始化HashTable,只有一个线程成功,只有一个线程cas成功,然后初始化哈希表:

 addCount:当哈希表put成功后,增加计数。

put流程,插入新值:

进入下面的else,说明桶下标冲突了,此时需要对链表头节点加锁,fh >= 0,说明是普通节点,进行普通的插入流程即可,bigcount代表链表长度。

 节点的类型是红黑树:

 

 bigcount(节点数)和门限值比较,看是否需要转化为红黑树:

 

 

 

Java,有几个线程安全集合类可以用于多线程环境下的操作。其包括Vector、Stack、HashTable等。这些集合类通过使用Synchronized来保证线程安全性。不过需要注意的是,官方已经标注Vector和HashTable为即将废弃的类,不建议使用它们。 除了上述的线程安全集合类,还有其他一些较新的线程安全集合类可以使用。其包括CopyOnWriteArrayList、CopyOnWriteArraySet和ConcurrentHashMap等。这些集合类通过特定的机制来实现线程安全性,而且在性能方面也进行了优化。 此外,Java还有Queue接口,它包含了几个线程安全的实现类,如ConcurrentLinkedQueue和BlockingQueue接口的实现类。这些集合类可以在多线程环境下进行安全的队列操作。 总之,在Java有多种线程安全集合类可供选择,可以根据具体的需求和场景选择合适的集合类来保证线程安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java那些线程安全集合类](https://blog.csdn.net/weixin_53946852/article/details/122801143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java线程安全集合](https://blog.csdn.net/weixin_42601136/article/details/107108818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值