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主要用在通信和和系统间的解耦

月神科技 国内上新成都高防 全场八折促销续费同价!

月神科技是由江西月神科技有限公司运营的一家自营云产品的IDC服务商,提供香港安畅、香港沙田、美国CERA、成都电信等机房资源,月神科技有自己的用户群和拥有创宇认证,并且也有电商企业将业务架设在月神科技的平台上。本次带来的是全场八折促销,续费同价。并且上新了国内成都高防服务器,单机100G集群1.2T真实防御,上层屏蔽UDP,可定制CC策略。非常适合网站用户。官方网站:https://www.ysi...

BGP.TO日本和新加坡服务器进行促销,日本服务器6.5折

BGP.TO目前针对日本和新加坡服务器进行促销,其中日本东京服务器6.5折,而新加坡服务器7.5折起。这是一家专门的独立服务器租售网站,提供包括中国香港、日本、新加坡和洛杉矶的服务器租用业务,基本上都是自有硬件、IP资源等,国内优化直连线路,机器自动化部署上架,并提供产品的基本管理功能(自助开关机重启重装等)。新加坡服务器 $93.75/月CPU:E3-1230v3内存:16GB硬盘:480GB ...

Virmach款低价VPS可选可以选择多个机房,新增多款低价便宜VPS主机7.2美元起

Virmach商家我们是不是比较熟悉?速度一般,但是人家价格低,而且机房是比较多的。早年的时候有帮助一个有做外贸也许需要多个机房且便宜服务商的时候接触到这个商家,有曾经帮助够买过上百台这样的低价机器。这里需要提醒的,便宜但是速度一般,尤其是中文业务速度确实不快,如果是外贸业务,那肯定是没有问题。这几天,我们有看到Virmach推出了夏季优惠促销,VPS首年8折,最低年付仅7.2美元,多机房可选,如...

queue为你推荐
linux重启命令Linux重启命令与如何重启网络安全防护谈谈你对自我安全防护的看法,如何保障自身安全和企业安全?word打字后面的字消失word中打字后面的一个字就不见了是什么原因啊?高手指教下,谢谢!!!!!cs躲猫猫cs躲猫猫怎么联机 今天在一个视频上看到的,T可以变成地图上的一个物品CT是找,请问怎么和老外联机diskgenius免费版diskgenius专业版破解怎么用安卓模拟器哪个好用PC平台的安卓模拟器哪个最好用安卓模拟器哪个好用安卓模拟器中文版哪个好?visio使用教程如何使用visio2013如何绘制UML图系统登录界面怎么样将系统登陆界面设置为可以切换到窗口登陆?系统登录界面谁知道XP系统的登录界面。和启动界面怎么更改的 急
vps是什么 备案域名出售 ipage 香港服务器99idc 外国空间 parseerror qq数据库 40g硬盘 创梦 怎样建立邮箱 hostloc 天翼云盘 东莞服务器 免费的域名 免费网络空间 电信宽带测速软件 shuangcheng fatcow 发证机构 时间同步服务器 更多