阻塞队列
-
插入元素
add():添加元素,满了抛异常。
put():添加元素,满了之后会阻塞。
offer():添加元素,添加失败后返回false。
offer(time):添加元素,阻塞一段时间后失败返回false,假如在这期间队列有位置了则添加成功。 -
删除/获取元素
remove():从队列中获取数据,没获取到抛异常。
taker():从队列中取数据,方法会阻塞住操作。
poll():从队列中获取数据,没获取到返回null。
poll(time):从队列中获取数据,会阻塞一段时间。 -
offer()方法:通过加锁来添加元素,假如满了返回false
-
用了Condition实现阻塞,存在Condition-NotEmpty(空的时候阻塞,非空的时候唤醒),Condition-NotFull(满的时候阻塞,非满的时候唤醒)
-
offer(time)方法,用了wait(time)实现定时阻塞
使用阻塞队列实现生产者消费者模型。
生产者消费者模型的优点
- 顺序消费
- 解耦:解决生产消费强依赖
- 解决生产者消费者速率不对等的问题(其实也算解耦)
ArrayBlockingQueue
数组实现的阻塞队列,初始化大小后无法修改。
LinkedBlockingQueue
链表实现的阻塞队列,默认大小Inter.MAX_VALUE。
DelayQueue
延迟队列,元素必须实现Delayed接口。
SynchronousBlockingQueue
队列中不存储任何元素,传入元素必须等被取走后才能继续传入,类似于一个阻塞的中转站,强制两边同步。
PriorityBlockingQueue
无界的并发队列,可以按照Priority排序,类似堆结构,可以称为优先队列。