基于数组的阻塞队列 ,ArrayBlockingQueue 原理

简介: 基于数组的阻塞队列 ,ArrayBlockingQueue 原理

阻塞队列


image.png

阻塞队列是在队列的基础上,去增加了两个附加操作,第一个队列为空的时候,获取元素的线程会等待队列为非空,当队列满时,存储元素的线程会等待队列可用,由于阻塞队列的这样一个特性,可以非常容易的去实现,生产者和消费者这样一个模型,也就是说,生产者只需要关心数据的一个生产,而消费者只需要关心数据的一个消费,所以,如果队列满了,生产者就等待,同样队列空了,消费者也需要等待。



实现这样一个阻塞队列,需要用到两个非常关键技术


  1. 是队列元素的一个存储


  1. 线程阻塞核唤醒



ArrayBlockingQueue


而ArrayBlockingQueue它是基于一个数组结构的一个阻塞队列,也就是说,队列元素是存储在一个数组结构里面,并且数据的长度是有限制的,为了达到循环生产和循环消费这一个目的,ArrayBlockingQueue里面用到了一个循环数组,而线程的阻塞和唤醒,用到了J.U.C里面的一个ReetrantLock和Condtion,Condtion相当于wait/notify在JUC包里面的一个实现



相关文章
|
6月前
|
存储 安全 Java
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
|
6月前
|
算法 安全 Java
【阻塞队列BlockingQueue&非阻塞队列ConcurrentLinkedQueue&同步队列SyncQueue】
【阻塞队列BlockingQueue&非阻塞队列ConcurrentLinkedQueue&同步队列SyncQueue】
生产者消费者模型(基于标准库提供的阻塞队列、基于环形数组自实现的阻塞队列)
生产者消费者模型(基于标准库提供的阻塞队列、基于环形数组自实现的阻塞队列)
|
5月前
|
消息中间件
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
32 0
|
8月前
|
存储 缓存 安全
BlockingQueue阻塞队列原理以及实现
BlockingQueue阻塞队列原理以及实现
76 0
|
9月前
|
存储 安全 Java
LinkedBlockingQueue 原理
LinkedBlockingQueue 原理
|
安全
基于数组的有界阻塞队列 —— ArrayBlockingQueue
在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。
95 0
|
安全
基于链表的有界阻塞队列 —— LinkedBlockingQueue
上一节看了基于数据的有界阻塞队列 ArrayBlockingQueue 的源码,通过阅读源码了解到在 ArrayBlockingQueue 中入队列和出队列操作都是用了 ReentrantLock 来保证线程安全。下面咱们看另一种有界阻塞队列:LinkedBlockingQueue。
144 0
|
存储 算法 安全
【Java数据结构及算法实战】系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
【Java数据结构及算法实战】系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
116 0
|
算法 安全 Java
【Java数据结构及算法实战】系列010:Java队列04——链表实现的阻塞队列LinkedBlockingQueue
【Java数据结构及算法实战】系列010:Java队列04——链表实现的阻塞队列LinkedBlockingQueue
117 0

热门文章

最新文章