(六)队列在线程池等有限资源中的应用

队列是一种先进先出的操作首先的线性表。分为顺序队列和链式队列,还有额外特性的队列,比如循环队列,阻塞队列,并发队列。入队时,tail->next= new_node, tail = tail->next;出队时,head =head->next。对满:tail=n,对空:head=tail。

1.循环队列

循环队列,首尾相连形成一个环。数组实现的循环队列,对满:(tail+1)%n=head,对空:head == tail,会浪费一个数组的存储空间。

2.阻塞队列

阻塞队列就是在队列的基础上增加了阻塞操作。队列为空时,出队会被阻塞;队列满时,入队会被阻塞。可以实现生产者-消费者模型。

3.并发队列

线程安全的队列叫做并发队列。最简单直接的实现方式是直接在 enqueue()、dequeue() 方法上加锁,但是锁粒度大并发度会比较低,同一时刻仅允许一个存或者取操作。基于数组的循环队列,利用 CAS 原子操作,可以实现非常高效的并发队列。

CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。

4.在有限资源中的应用

  • 1.非阻塞处理方式,直接拒绝任务请求。

  • 2.阻塞处理方式,将请求排队,有空闲线程时在处理。

  1. 链表实现无限排队的无界队列,但是会导致过多的请求排队响应时间长。不适合线程池。

  2. 数组实现的有界队列,请求超过队列大小时,请求会被拒绝。需要合理设置队列大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值