必威体育Betway必威体育官网
当前位置:首页 > IT技术

JUC--队列概述

时间:2019-10-06 05:13:35来源:IT技术作者:seo实验室小编阅读:82次「手机版」
 

队列

1 概述

java中的队列是一个FIFO的数据结构,适用于生产者消费者模式。queue接口与List、Set同一级别,都是继承了Collection接口,LinkedList也实现了Deque接口。

当然java中的队列有阻塞和非阻塞队列,下面我们就来看一看Java中队列都有哪些实现。

2 类图

下面我们来看一下java中队列的家庭成员。

3 详细说明

3.1 Queue

Queue接口继承于Collection接口,用于存储将要被使用的数据。也就是说Queue是一个队列,采用FIFO的方式,针对Queue接口,除了拥有Collection的方法之外,还拥有处理队列数据的独有方法。这些方法在处理失败情况的时候表现为两种行为,一种是直接抛出异常,一种返回false或者返回空。下面针对方法详细说明。

操作失败的处理 抛出异常 返回false或者null
添加 add offer
返回并移除(尾部的元素) remove poll
返回不移除(尾部的元素) element peek

这里我们需要注意的是Queue不建议插入null,因为在某些操作失败的情况下也会返回null。

3.2 blockingqueue

BlockingQueue继承自Queue,处理包含Queue的功能之外,还支持阻塞等待。当获取数据的时候,如果队列中没有数据,将等待直到有数据或者超时。当存入数据的时候,如果没有空闲位置用于存放数据,将等待直到由空闲位置或者超时。下面我们具体来看这几种方式的方法。

  抛出异常 返回特殊值 阻塞 超时等待
添加 add offer put offer(Object,long,TimeUnit)
返回并移除(尾部的元素) remove poll take poll(long, TimeUnit)
返回不移除(尾部的元素) element peek    

3.3 AbstractQueue

抽象队列类,这个类实现了队列类的基本方法add,remove,element,并且这些类内部的实现分别依赖于offer,poll和peek,所有继承于AbstractQueue的类得实现offer,poll和peek这三个函数

3.4 TransferQueue

这个接口继承自BlockingQueue接口,是一个阻塞队列,使用这个队列,生产者可以等待消费者消费了自己生产的数据然后再返回。具体提供了如下三个数据传输的方法:

(1)boolean tryTransfer(E e)

传输数据到队列中,如果有消费者马上使用了传递的数据就返回true,否则返回false。

(2)void transfer(E e) throws InterruptedException

传输数据到队列中,等待直到自己生产的数据被消费者消费。

(3) boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException

等待一定的时间,如果数据没有被消费就直接返回

上面就是针对队列有关的抽象类和接口的详细说明,至于具体的队列类,我们将在后续的文章中分析。

相关阅读

【LeetCode】—— 设计循环队列LeetCode622题

设计循环队列 题目描述 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。

linux work queue及并发可管理工作队列

并发可管理工作队列的出现慢工作机制 为什么说是“提供过内核中还曾短暂出现过慢工作机制 (slow work mechanism)”,原因是在 main

beanstalkd消息队列在生产环境的应用

Beanstalkd 是一个高性能的消息队列中间件,本博文宅鸟将介绍一下这个东东的使用。一、先通过概念让大家了解Beanstalkd的特性和工

Java 集合深入理解(9):Queue 队列

点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情不太好,来学一下 List 吧! 什么是队列 队列是数

1、Java实现队列(Queue)的方式

编程题目: 1.请用Java实现队列(Queue)。 队列实现的三种方式: (1)通过数组实现一个队列; (2)通过集合实现一个对列; (3)通过两

分享到:

栏目导航

推荐阅读

热门阅读