什么是队列?
我们可以想象我们平常排队的情况。先到的先进去,后面到来的等待排队。不允许插队。
先进先出,这就是队列
队列也是一种线性表数据结构。当然也与栈一样属于受限的线性数据结构。
操作也支持入队与出队两种操作。
![](https://img.haomeiwen.com/i4237685/5a564548a2af41e4.png)
队列的表现形式
我们在实现队列的时候,也是根据数组或者链表的形式来表现。
数组实现的队列,叫做顺序队列。
链表形成的队列,叫做链式队列
- 顺序队列
在队列的实现流程中,我们会发现需要两个指针表示位置,头指针与尾指针。我们需要对头和尾指针进行不停的移动。
代码实现: - 链式队列
链式队列使用链表实现。需要我们首先实现一个链表的代码
循环队列
循环队列表现形式就是一个环状形态,当然也有自己的头指针与尾指针
![](https://img.haomeiwen.com/i4237685/15a3413f6a00fe80.png)
循环队列的满与空的判断条件:
空条件是:head=tail
满的条件:(tail+1)%n =head
满的条件的时候,最后一个位置上是没有数据的。
阻塞队列
阻塞队列是在队列的基础上加上了阻塞操作。为空或者满,都会发生阻塞操作。
阻塞队里是用数组实现,数组实现的队列有大小限制,链表实现的队列没有内存限制。前提是服务器内存不限制。
![](https://img.haomeiwen.com/i4237685/e1315ccfe5251873.png)
并发队列
并发队列也是线程安全的队列。实现方式是在队列的入队与出队的操作中增加锁机制。也可以是CAS(Compare & Swap)原子操作。
实战 问题操作
- 问题:线程没有空闲线程时,新的任务请求县城资源,线程如何处理。各种处理策略应该如何操作。
- 直接拒绝任务请求。
- 阻塞的处理请求方式,将请求排队,等有空闲线程时,取出来进行任务处理。
网友评论