java各种容器的使用场景(含高并发)

本文深入解析Java中不同并发级别的容器选择,包括Map、Set、队列等,在无并发、低并发及高并发场景下的最佳实践。从HashMap到ConcurrentHashMap,再到CopyOnWriteList,全面覆盖各类容器的特性和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

一:对于Map/Set

**

不需要并发时:

HashMap:一般就用这个
TreeMap:需要排序时,使用这个
LinkedhashMap:有序的Map
上述三个Map都不是线程安全的,因此在高并发的时候不推荐使用。Set同理,只需要将Map换为Set即可。

并发不是很大时:

Hashtable:早期的线程安全Map。速度较慢,高并发下不推荐使用。
Collections.sychronizedXxx:将不安全的容器包装成安全的容器后返回,返回的容器则为安全的容器。

高并发时:

ConcurrentHashMap:线程安全Map,用来替代HashMap。采用粒度更细的加锁机制:分段锁,因此高并发下可以实现更高的吞吐量,单线程下也只会损失很小的性能。
ConcurrentSkipListMap :线程安全Map,且为有序的Map,用于替代SortedMap,支持高并发。Set只需将Map换为Set即可。

二:对于队列

不需要并发时:

ArrayList:最常用
LinkedList:支持队列操作

并发不是很大时:

vector:早期的线程安全容器,速度较慢,高并发下不推荐使用。
Collections.sychronizedXxx:将不安全的容器包装成安全的容器后返回,返回的容器则为安全的容器。

高并发时:

CopyOnWriteList:避免了高并发下的脏读现象,写入速度贼慢,读取速度快,因此适用于读多写少的情况。
Queue:分为以下三种

1:concurrentArrayQueue//CocurrentLinkedQueue

没啥特殊的,就是支持高并发而已。

2:BlockingQueue:阻塞队列

ArrayBlockingQueue:有界的阻塞队列
LinkedBlockingQueue:无界的阻塞队列
TransferQueue:直接交给消费者线程执行,不放在缓冲区,没有消费者时会阻塞
SynchronusQueue:容量为0的队列

3:DelayQueue 执行定时任务

总结自马老师的java高并发公开课,如有错误的地方,欢迎指出纠正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值