线程中高逼格类和概念

线程中的常见类及概念

大家都是用过,TreeMap和TreeSet,使用红黑树按照key的顺序,进行存储,但是只能
在单线程的场景下。
在多线程下面使用ConcurrentSkipListMap和ConcurrentSkipListSet。就是所说的跳跃表。
ConcurrentSkipListSet本质上就是ConcurrentSkipListMap。

ConcurrentLinkedQueue可以看成是LinkedList的并发版本。

写时复制容器
CopyOnWriteArrayList和CopyOnWriteArraySet
在写的时候复制一个容器去写,读的时候直接去读取,用的也是读写分离的思想。

性能问题
每次修改都创建一个新的数组,然后复制所有的内容,频繁操作的话,内存开销会很大。

BlockingQueue阻塞队里。
先进先出,用的等待超时模式。当队里满的时候,等待放入,当队列null的时候,等待取出。

常用的阻塞队列有
ArrayBlockingQueue 一个由数组组成的有界阻塞队列
LinkedBlockingQueue 链表
PriorityBlockingQueue 支持优先级
DelayQueue 延迟
SynchronousQueue 不存储元素
LinkedTransferQueue transfer 可以直接给消费者
LinkedBlockingDeque 链表,双向阻塞队列

array和linked 实现的区别
队列中锁的实现不同
ArrayBlockingQueue 实现的队列中的锁是没有分离的,即生产和消费用的是
同一个锁。
LinkedBlockingQueue 实现的队列中的锁是分离的,即生产用的是putLock,
消费是takeLock。

在生产或消费时操作不同
ArrayBlockingQueue 实现的队列中在生产和消费的时候,是直接将枚举对象
插入或移除的。
LinkedBlockingQueue 实现的队列中在生产和消费的时候,需要把枚举对象转
换为Node进行插入或移除,会影响性能。

队列大小初始化方式不同
ArrayBlockingQueue 实现的队列中必须指定队列的大小。
LinkedBlockingQueue 实现的队列中可以不指定队列的大小,但是默认是
Integer.MAX_VALUE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

張義帥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值