Java并发——阻塞队列的实现

1.使用场景

阻塞的应用场景,比如 生产-消费模式,限流统计等等。什么 ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue 等等,都是阻塞队列的实现。

但是我们发现其使用目的和消息队列类似,实际上是的,只是阻塞队列是用于单个系统的消息传递,生产者消费者模式,而消息队列一般是分布式系统间的生产者消费者模式,但无论是哪种形式,其实现都离不开基本的多线程同步编程模式。

2.实现原理

阻塞队列(BlockingQueue)是一个接口,其具体实现分为如下几种,包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等等。

  • ArrayBlockingQueue:从名称上就可以知道ArrayBlockingQueue底层是以数组模拟实现的,既然以数组模拟,其动态扩展便不方便,因此适合做有界队列,需要在创建时就指定最大容量。
  • LinkedBlockingQueue:以链表模拟实现,由于是链表,扩展方便,因此适合做无界队列。

下面讲一下最主要的阻塞的实现,阻塞在于:队列为空时取元素,则线程阻塞;队列满时加元素,则线程阻塞。而对于这种生产者消费者模式,其实最方便的便是使用 锁+多个条件变量 来实现。

自然而然想到需要两个条件变量:notEmpty(队列空,取元素时,一直阻塞在notEmpty上),notFu

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值