阻塞队列
使用场景
生产者消费者:阻塞队列是一个 fifo 的队列,所以对于希望在线程级别需要实现对目标服务的顺序访问的场景中。在 Java8 中,提供了 7 个阻塞队列
特点
- 队列满时,入队线程会被堵塞
- 队列空时,出对线程会被堵塞
实现
- ArrayBlockingQueue:数组实现的有界阻塞队列, 此队列按照先进先出(FIFO)的原则对元素进行排序。
- LinkedBlockingQueue:链表实现的有界阻塞队列, 此队列的默认和最大长度为Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序。
- PriorityBlockingQueue:支持优先级排序的无界阻塞队列, 默认情况下元素采取自然顺序升序排列。也可以自定义类实现 compareTo()方法来指定元素排序规则,或者初始化 PriorityBlockingQueue 时,指定构造参数 Comparator 来对元素进行排序。
- DelayQueue:优先级队列实现的无界阻塞队列。
- SynchronousQueue:不存储元素的阻塞队列, 每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。
- LinkedTransferQueue:链表实现的无界阻塞队列。
- LinkedBlockingDeque:链表实现的双向阻塞队列。
操作方法
操作 | Throws Exception | Special Value | Blocks | Times Out | |
添加 | add(o) | offer(o) | put(o) | offer(o,timeout,timeunit) | |
移除 | remove(o) | poll() | take() | poll(timeout,timeunit) | |
检查 | element() | peek() |
- 插入元素操作
- 删除/获取元素操作