jjzjj

priority-queue

全部标签

java - ActiveMQ : dead letter queue keeps my messages order

我使用ActiveMQ作为代理来传递消息。这些消息旨在写入数据库中。有时,数据库无法访问或已关闭。在这种情况下,我想回滚我的消息以便稍后重试此消息,并且我想继续阅读其他消息。这段代码工作正常,除了一点:回滚消息阻止我阅读其他代码:privateConnectiongetConnection()throwsJMSException{RedeliveryPolicyredeliveryPolicy=newRedeliveryPolicy();redeliveryPolicy.setMaximumRedeliveries(3);//willretry3timestodequeuerollba

java - 由 PriorityBlockingQueue 支持的 ThreadPoolExecutor 似乎不起作用

我有大量图片要从服务器获取,我想获取一些优先级高于其他图片的图片,所以我实现了自己的ThreadPoolExecutor返回一个FutureTask实现了Comparable但它似乎不起作用。这些任务或多或少按照我将它们添加到队列的顺序进行处理。我已经调试了ThreadPoolExecutor的BlockingQueue并发现当我添加具有更高优先级的Runnable时,它并没有转移所有排在队列的顶部。这是代码publicclassPriorityThreadPoolExecutorextendsThreadPoolExecutor{publicPriorityThreadPoolExe

java - 从集合构造 PriorityQueue 的时间复杂度是多少?

带有Collection的JavaPriorityQueue构造函数的复杂性是什么?我使用了构造函数:PriorityQueue(Collectionc)复杂度是O(n)还是O(n*log(n))? 最佳答案 从集合(即使是未排序的集合)中初始化PriorityQueue的时间复杂度为O(n)。这在内部使用了一个名为siftDown()的过程来就地“堆化”数组。(这在文献中也被称为下推。)这是违反直觉的。将一个元素插入堆中似乎是O(logn),因此插入n个元素会导致O(nlogn)复杂度。如果您一次插入一个元素,就会出现这种情况。(

Java 优先级队列比较器

我已经为优先级队列定义了自己的比较函数,但是比较函数需要数组的信息。问题是当数组的值改变时,它并没有影响比较函数。我该如何处理?代码示例:importjava.util.Arrays;importjava.util.Comparator;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassMain{publicstaticfinalintINF=100;publicstaticint[]F=newint[201];publicstaticvoidmain(String[]args){PriorityQueue

java - Java PriorityQueue(堆)插入n个元素的时间复杂度?

这个问题在这里已经有了答案:HowcanbuildingaheapbeO(n)timecomplexity?(18个答案)关闭5年前。我想知道JavaPriorityQueue.Add()对n元素的时间复杂度是多少。我知道插入单个元素的潜在更坏情况是O(log(n)),但我不清楚插入n集合的时间复杂度是多少元素?我从各种来源(没有证据)中看到,构建一个n元素的优先级队列堆的时间是O(n),并且还看到声称它是O(nlog(n)),这是有意义的,因为插入是O(log(n)),它乘以n时间确实等于O(nlog(n))注意:我只对最坏的情况感兴趣,而不是摊销。这个问题假设有一种逻辑方法来描述用

java.util.concurrent.DelayQueue 忽略过期元素

下面的java代码示例使用javaDelayQueue来处理任务。然而,从另一个线程插入任务似乎会破坏(我的)预期行为。很抱歉代码示例太长,但总而言之:主线程将5个任务(A-E)添加到具有不同延迟(0毫秒、10毫秒、100毫秒、1000毫秒、10000毫秒)的延迟队列开始另一个步骤,在3000毫秒后将另一个任务添加到DelayQueue主线程轮询DelayQueue并在每个Task到期时报告8000毫秒后,主线程报告延迟队列中剩余的任务我从代码示例中得到的输出是:------initialtasks---------------taskAduein0mstaskBduein9mstas

Java - 寻找比 PriorityQueue 更快的东西

我正在对大量数据使用java。[我尽量简化问题]实际上我有一个小类(Element),其中包含一个intKEY和一个doubleWEIGHT(带有getters和setters)。我从一个文件中读取了很多这样的对象,我必须得到最好的(最重的)M个对象。实际上,我正在使用带有比较器的PriorityQueue来比较两个元素,它可以工作,但速度太慢。你知道(我知道你知道)有什么更快的方法吗?谢谢 最佳答案 基于堆的优先队列是解决这个问题的一个很好的数据结构。正如健全性检查一样,验证您是否正确使用了队列。如果您想要最高权重的项目,请使用m

java - 如何使用 Comparable 比较链表中的通用节点?

我正在使用链表实现排序列表。我的节点类看起来像这样publicclassNode{Eelem;Nodenext,previous;}在排序列表类中,我有add方法,我需要根据通用对象的compareTo()方法的实现来比较通用对象,但我得到了这个语法错误“方法compareTo(E)未为类型E定义”。我已经尝试在Node中实现compareTo方法,但是我无法调用任何对象的方法,因为E是泛型类型。这是add(Eelem)方法的未完成主体。publicvoidadd(Eelem){Nodetemp=newNode();temp.elem=elem;if(isEmpty()){temp.n

java - 简单的 Java PriorityQueue<String> 错误

我所做的就是将三个字符串添加到JavaPriorityQueue,然后将它们打印出来这是我的代码:importjava.util.*;importjava.lang.*;classMain{publicstaticvoidmain(String[]args)throwsjava.lang.Exception{PriorityQueuepq=newPriorityQueue();pq.add("abc");pq.add("ability");pq.add("aberdeen");Strings="ability";System.out.println(s.compareTo("aberd

java - 并发队列 - 一般问题(描述和用法)

我在理解并发队列的概念时遇到了一些困难。我了解队列是一种FIFO,即先到先得的数据结构。现在当我们添加并发部分时,我将其解释为线程安全(如果不正确,请告诉我)事情变得有点模糊。并发性是指各种线程可以添加到队列或从队列中删除(服务项目)的方式?并发是否为该操作提供了一种有序感?我将非常感谢对并发队列功能的一般描述。类似的帖子here并不像我希望的那样一般。还有并发优先级队列这种东西吗?它的用途是什么?非常感谢有关此主题的任何简短解释或有用链接。 最佳答案 BlockingQueue提供很少开销的概念有点误导。获取锁会调用相当大的开销。