到底什么是阻塞队列?有啥用?

您所在的位置:网站首页 维持阻塞结构指的是什么 到底什么是阻塞队列?有啥用?

到底什么是阻塞队列?有啥用?

2024-04-06 23:05| 来源: 网络整理| 查看: 265

点击关注公众号,Java干货及时送达

作者:海向地址:www.cnblogs.com/haixiang/p/12354520.html

什么是阻塞队列

阻塞队列是一个支持阻塞的插入和移除的队列。

支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。

支持阻塞的移除方法:意思是队列为空时,获取元素(同时移除元素)的线程会被阻塞,等到队列变为非空。

阻塞队列用法

阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里获取元素的线程。

当阻塞队列不可用时,会有四种相应的处理方式:

处理方式抛出异常返回特殊值一直阻塞超时退出插入操作add(e)offer(e)put(e)offer(e, time, unit)移除操作remove()poll()take()poll(time, unit)获取操作element()peek()不可用不可用

返回特殊值:插入元素时,会返回是否插入成功,成功返回true。如果是移除方法,则是从队列中取出一个元素,没有则返回null。

一直阻塞:当阻塞队列满时,如果生产者线程往队列里面put元素,则生产者线程会被阻塞,知道队列不满或者响应中断退出。当队列为空时,如果消费者线程从队列里take元素。

超时退出:当阻塞队列满时,如果生产者线程往队列里插入元素,队列会阻塞生产者线程一段时间,如果超过了指定时间,生产者线程就会退出。

如果是无界阻塞队列,队列则不会出现满的情况。

阻塞队列

ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列

LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列

PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列

DelayQueue:一个使用优先级队列实现的无界阻塞队列

SynchronousQueue:一个不存储元素的阻塞队列

LinkedTransferQueue:一个由链表结构组成的无界阻塞队列

LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列

1.ArrayBlockingQueue

此队列按照先进先出(FIFO)的原则对元素进行排序

默认情况下不保证线程公平地访问队列(所谓公平是指当队列可用时,先被阻塞的线程先访问队列)

为了保证公平性通常会降低吞吐量。

公平锁是利用了可重入锁的公平锁来实现。

public ArrayBlockingQueue(int capacity, boolean fair) {     if (capacity 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3