- 队列是先进先出,类似栈操作受限
- 具有高级特性的队列:Disruptor、Linux环形队列,Java concurrent中的ArrayBlockingQueue
- 队列的一般实现方式:数组、链表
- 队列使用两个指针:head,tail实现;tail一般指向一个空节点,也可以使用一个额外的size记录队列当前长度来防止这个空节点浪费(实际上这个记录size的变量也占用空间了)
- 一般数组队列在tail指向数组最后一个位置后就满了,需要做数据搬移操作:把队列从头到尾搬移到数组从0开始的位置; 如果数组满了就新建更大数组整体搬移;
- 列表队列没有数组长度限制,实现比数组简单
- 可以使用循环队列解决一般数组队列的搬运问题,实现重点:队列满和空的判定条件(空:
**tail == head**
,满:**(tail + 1) % n ==head**
) - 阻塞队列:队满时挂起请求直到队列有空,并发队列:线程安全对接(待续)
- 队满时的处理策略:1、直接拒绝非阻塞 2、请求排队挂起(链表方式:无界,可能导致等待时间过长,数组方式:超过大小时拒绝防止等待过长,但是大小设置需要结合业务合理设置)
- cas数组队列如何实现高并发?