顾名思义
阻塞队列
在多线程领域:所谓阻塞,在某些情况下,会挂起(阻塞),一旦满足条件
被挂起的线程又会被自动唤醒
为什么需要BlockingQueue
好处是我们不用关心什么时候需要阻塞线程,什么时候需要被唤醒,因为这一切被BlockingQueue包办
介绍:
ArrayBlockingQueue:有数组结构构成的有界阻塞队列
解析:
抛出异常:
- 当阻塞队列满时,再往里面add 插入元素会抛出异常
- 当阻塞队列空时,再往里面remove移除元素会抛出NoSuchElementException
特殊值
- 插入方法,成功true,失败false
- 移除方法,成功返回队列元素,队列没有返回null
一直阻塞
- 当队列满时,生产者线程继续往队列put元素,队列会一直产生线程直到put数据or响应中断退出
- 当阻塞队列空时,消费者线程试图从队列中take元素,队列会一直阻塞消费者线程知到队列可用
超时退出
- 当阻塞队列满时,队列会阻塞生产者线程一定时间,超过限时后生产者线程会退出
其余实现类(略微带过)
LinkedBlockingQueue:由链表结构组成的有界
-
(但大小默认值为integer:MAX_VALUE(约21亿))阻塞队列
SynchronousQueue:
-
不存储元素的阻塞队列,也即单个元素的队列
linkedBlockingDeque:
-
有链表组成的双向阻塞队列