queuejava中的queue和各种mq 什么区别

queue  时间:2021-08-11  阅读:()

Queue是甚么文件

queue类是为程序员提供了一个队列的功能的容器适配器,具体而言,一个FIFO(先入先出)的数据结构 在头文件<queue>中定义。

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列中没有元素时,称为空队列。

queue队列默认个数是多少个,谢谢?

不明白你说的个数是什么意思 但是如果你说默认的最大元素个数,我可以看看 队列在按接收顺序存储消息方面非常有用,以便于进行顺序处理。

此类将队列作为循环数组实现。

存储在 Queue 中的对象在一端插入,从另一端移除。

Queue 的容量是 Queue 可以保存的元素数。

Queue 的默认初始容量为 32。

向 Queue 添加元素时,将通过重新分配来根据需要自动增大容量。

可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。

在构造 Queue 时确定增长因子。

默认增长因子为 2.0。

Queue 接受 空引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素。

如何使用queue

Queue接口与List、Set同一级别,都是继承了Collection接口。

LinkedList实现了Queue接 口。

Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。

BlockingQueue 继承了Queue接口。

队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。

工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。

队列会自动平衡负载。

如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。

如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。

下表显示了jdk1.5中的阻塞队列的操作: add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 offer 添加一个元素并返回true 如果队列已满,则返回false poll 移除并返问队列头部的元素 如果队列为空,则返回null peek 返回队列头部的元素 如果队列为空,则返回null put 添加一个元素 如果队列满,则阻塞 take 移除并返回队列头部的元素 如果队列为空,则阻塞 remove、element、offer 、poll、peek 其实是属于Queue接口。

阻塞队列的操作可以根据它们的响应方式分为以下三类:aad、removee和element操作在你试图为一个已满的队列增加元素或从空队列取得元素时 抛出异常。

当然,在多线程程序中,队列在任何时间都可能变成满的或空的,所以你可能想使用offer、poll、peek方法。

这些方法在无法完成任务时 只是给出一个出错示而不会抛出异常。

注意:poll和peek方法出错进返回null。

因此,向队列中插入null值是不合法的。

还有带超时的offer和poll方法变种,例如,下面的调用: boolean ess = q.offer(x,100,TimeUnit.MILLISECONDS); 尝试在100毫秒内向队列尾部插入一个元素。

如果成功,立即返回true;否则,当到达超时进,返回false。

同样地,调用: Object head = q.poll(100, TimeUnit.MILLISECONDS); 如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。

最后,我们有阻塞操作put和take。

put方法在队列满时阻塞,take方法在队列空时阻塞。

java.ulil.concurrent包提供了阻塞队列的4个变种。

默认情况下,LinkedBlockingQueue的容量是没有上限的(说的不准确,在不指定时容量为Integer.MAX_VALUE,不要然的话在put时怎么会受阻呢),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。

ArrayBlockingQueue在构造时需要指定容量, 并可以选择是否需要公平性,如果公平参数被设置true,等待时间最长的线程会优先得到处理(其实就是通过将ReentrantLock设置为true来 达到这种公平性的:即等待时间最长的线程会先操作)。

通常,公平性会使你在性能上付出代价,只有在的确非常需要的时候再使用它。

它是基于数组的阻塞循环队 列,此队列按 FIFO(先进先出)原则对元素进行排序。

PriorityBlockingQueue是一个带优先级的 队列,而不是先进先出队列。

元素按优先级顺序被移除,该队列也没有上限(看了一下源码,PriorityBlockingQueue是对 PriorityQueue的再次包装,是基于堆数据结构的,而PriorityQueue是没有容量限制的,与ArrayList一样,所以在优先阻塞 队列上put时是不会受阻的。

虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError),但是如果队列为空,那么取元素的操作take就会阻塞,所以它的检索操作take是受阻的。

另外,往入该队列中的元 素要具有比较能力。

最后,DelayQueue(基于PriorityQueue来实现的)是一个存放Delayed 元素的无界阻塞队列,只有在延迟期满时才能从中提取元素。

该队列的头部是延迟期满后保存时间最长的 Delayed 元素。

如果延迟都还没有期满,则队列没有头部,并且poll将返回null。

当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于或等于零的值时,则出现期满,poll就以移除这个元素了。

此队列不允许使用 null 元素。

下面是延迟接口: Java代码 public interface Delayed extends Comparable<Delayed> { long getDelay(TimeUnit unit); } 放入DelayQueue的元素还将要实pareTo方法,DelayQueue使用这个来为元素排序。

下面的实例展示了如何使用阻塞队列来控制线程集。

程序在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的文件列表。

从下面实例可以看出,使用阻塞队列两个显著的好处就是:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。

下面是具体实现: Java代码 public class BlockingQueueTest { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): "); String directory = in.nextLine(); System.out.print("Enter keyword (e.g. volatile): "); String keyword = in.nextLine(); final int FILE_QUEUE_SIZE = 10;// 阻塞队列大小 final int SEARCH_THREADS = 100;// 关键字搜索线程个数 // 基于ArrayBlockingQueue的阻塞队列 BlockingQueue<File> queue = new ArrayBlockingQueue<File>( FILE_QUEUE_SIZE); //只启动一个线程来搜索目录 FileEnumerationTask enumerator = new FileEnumerationTask(queue, new File(directory)); new Thread(enumerator).start(); //启动100个线程用来在文件中搜索指定的关键字 for (int i = 1; i <= SEARCH_THREADS; i++) new Thread(new SearchTask(queue, keyword)).start(); } } class FileEnumerationTask implements Runnable { //哑元文件对象,放在阻塞队列最后,用来标示文件已被遍历完 public static File DUMMY = new File(""); private BlockingQueue<File> queue; private File startingDirectory; public FileEnumerationTask(BlockingQueue<File> queue, File startingDirectory) { this.queue = queue; this.startingDirectory = startingDirectory; } public void run() { try { enumerate(startingDirectory); queue.put(DUMMY);//执行到这里说明指定的目录下文件已被遍历完 } catch (InterruptedException e) { } } // 将指定目录下的所有文件以File对象的形式放入阻塞队列中 public void enumerate(File directory) throws InterruptedException { File[] files = directory.listFiles(); for (File file : files) { if (file.isDirectory()) enumerate(file); else //将元素放入队尾,如果队列满,则阻塞 queue.put(file); } } } class SearchTask implements Runnable { private BlockingQueue<File> queue; private String keyword; public SearchTask(BlockingQueue<File> queue, String keyword) { this.queue = queue; this.keyword = keyword; } public void run() { try { boolean done = false; while (!done) { //取出队首元素,如果队列为空,则阻塞 File file = queue.take(); if (file == FileEnumerationTask.DUMMY) { //取出来后重新放入,好让其他线程读到它时也很快的结束 queue.put(file); done = true; } else search(file); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { } } public void search(File file) throws IOException { Scanner in = new Scanner(new FileInputStream(file)); int lineNumber = 0; while (in.hasNextLine()) { lineNumber++; String line = in.nextLine(); if (line.contains(keyword)) System.out.printf("%s:%d:%s%n", file.getPath(), lineNumber, line); } in.close(); } }

英语单词queue的来历是什么?

来源: 为了理解好这个词组,最简单的方式就是联想到美人鱼。

在水手们注意到美人鱼的鱼尾前,他们对美人鱼的上半身十分着迷。

早在公元前1世纪时,罗马诗人贺拉斯就已如此描述过一件令人失望的艺术作品:“以致于上半部分如一位令人喜爱的女士,下半部分则如一条可怕的鱼 ”。

之后,在19世纪,法国作家巴尔扎克在描述巴黎街道时也用了这个词组,他写道:“有些街道,包括蒙马特尔街,都拥有美丽的街头和如鱼尾般糟糕的街尾。

” Exemple: Nous pensons que cet effet va probablement finir en queue de poisson. 例子:我们认为这个效果最终可能会令人失望。

java中的queue和各种mq 什么区别

1、java中的queue更多情况是多线程里面用到的队列,在多线程中主要用来存取一些线程方法产生的数据或者需要的数据 2、mq是一种消息队列,主要要来做点与点之间的通信。

举个例子:电脑A发消息给电脑B,电脑A把消息发到消息队列中,电脑B从消息队列中得到消息 3、queue主要用在多线程,mq主要用在通信和和系统间的解耦

Hostodo,美国独立日特价优惠,四款特价VPS云服务器7折,KVM虚拟架构,NVMe阵列,1核512M内存1Gbps带宽3T月流量,13.99美元/月,赠送DirectAdmin授权

Hostodo近日发布了美国独立日优惠促销活动,主要推送了四款特价优惠便宜的VPS云服务器产品,基于KVM虚拟架构,NVMe阵列,1Gbps带宽,默认分配一个IPv4+/64 IPv6,采用solusvm管理,赠送收费版DirectAdmin授权,服务有效期内均有效,大致约为7折优惠,独立日活动时间不定,活动机型售罄为止,有需要的朋友可以尝试一下。Hostodo怎么样?Hostodo服务器好不好?...

10gbiz:香港/洛杉矶CN2直连线路VPS四折优惠,直连香港/香港/洛杉矶CN2四折

10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...

HostKvm四月优惠:VPS主机全场八折,香港/美国洛杉矶机房$5.2/月起

HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月商家针对全场VPS主机提供8折优惠码,优惠后美国洛杉矶VPS月付5.2美元起。下面列出几款不同机房VPS主机产品配置信息。套餐:美国US-Plan0CPU:1cores内存:1GB硬...

queue为你推荐
电视蚂蚁电视机里进蚂蚁怎么处理爬虫网如何自己写一个网络爬虫实数的定义数学中的“实数”是什么?阶乘函数C语言编写一个求n阶乘的函数,在主函数中输入n,调用函数求n阶乘。。谢谢团购网源码谁有功能比较全的团购网的代码?廖华如何构思作文课教案 南京廖华snoopy官网史努比童装品牌简介是什么?rar分卷压缩什么叫压缩分卷啊?从零开始学android从零开始学android,是参加培训机构好还是买教程自学好呢?射击类网络游戏现在什么射击类的网络游戏最好玩??????
德国vps cybermonday 域名商 华为云服务 好看的桌面背景图 hnyd 建立邮箱 jsp空间 百度云1t 太原网通测速平台 卡巴斯基破解版 爱奇艺会员免费试用 华为云盘 厦门电信 美国独立日 宏讯 smtp虚拟服务器 中国电信测速器 英雄联盟台服官网 贵阳电信 更多