Questions tagged «queue»

队列是有序的先进先出数据结构。队列的典型实现支持将元素向后推,并将其弹出前部位置。



8
大小受限制的队列,其中包含Java中的最后N个元素
关于Java库的一个非常简单和快速的问题:是否有一个现成的类,该类Queue以固定的最大大小实现-即,它始终允许添加元素,但是它将静默删除head元素以容纳新添加元素的空间。 当然,手动实现它很简单: import java.util.LinkedList; public class LimitedQueue<E> extends LinkedList<E> { private int limit; public LimitedQueue(int limit) { this.limit = limit; } @Override public boolean add(E o) { super.add(o); while (size() > limit) { super.remove(); } return true; } } 据我所知,Java stdlibs中没有标准实现,但是Apache Commons中可能有这种实现?
197 collections  queue  java 

7
Queue.Queue与collections.deque
我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以读取。 Python至少有两个队列类,Queue.Queue和collections.deque,前者似乎在内部使用后者。两者都声称在文档中是线程安全的。 但是,队列文档还指出: collections.deque是具有无限原子append()和popleft()操作的无界队列的替代实现,不需要锁定。 我猜我不太理解:这是否意味着双端队列毕竟不是完全线程安全的? 如果是这样,我可能无法完全理解两个类之间的区别。我可以看到Queue添加了阻止功能。另一方面,它失去了一些过时的功能,例如对操作员的支持。 直接访问内部双端队列对象是 Queue()中的x 线程安全的? 另外,当双端队列已经是线程安全的了,为什么Queue在操作上使用互斥锁?

11
如何有效清除std :: queue?
我正在使用std :: queue来实现JobQueue类。(基本上,此类以FIFO方式处理每个作业)。在一种情况下,我想一次清除队列(从队列中删除所有作业)。我在std :: queue类中看不到任何清晰的方法。 如何有效实现JobQueue类的clear方法? 我有一个循环弹出的简单解决方案,但我正在寻找更好的方法。 //Clears the job queue void JobQueue ::clearJobs() { // I want to avoid pop in a loop while (!m_Queue.empty()) { m_Queue.pop(); } }
166 c++  stl  queue 

9
在.NET中创建阻塞Queue <T>?
我有一个场景,其中有多个线程添加到队列中,并且有多个线程从同一队列中读取。如果队列达到特定大小,则添加队列时将阻塞正在填充队列的所有线程,直到从队列中删除一项为止。 下面的解决方案是我现在正在使用的解决方案,我的问题是:如何改进?是否有一个对象已经在我应该使用的BCL中启用此行为? internal class BlockingCollection&lt;T&gt; : CollectionBase, IEnumerable { //todo: might be worth changing this into a proper QUEUE private AutoResetEvent _FullEvent = new AutoResetEvent(false); internal T this[int i] { get { return (T) List[i]; } } private int _MaxSize; internal int MaxSize { get { return _MaxSize; } set …


15
异步运行PHP任务
我在一个比较大的Web应用程序上工作,后端主要使用PHP。代码中有几个地方需要完成一些任务,但是我不想让用户等待结果。例如,在创建新帐户时,我需要向他们发送欢迎电子邮件。但是当他们按下“完成注册”按钮时,我不想让他们等到实际发送电子邮件之后,我只想开始该过程,并立即向用户返回一条消息。 到目前为止,在某些地方,我一直在使用exec()感觉像是被黑客入侵。基本上是这样的: exec("doTask.php $arg1 $arg2 $arg3 &gt;/dev/null 2&gt;&amp;1 &amp;"); 这似乎可行,但我想知道是否有更好的方法。我正在考虑编写一个在MySQL表中排队任务的系统,以及一个单独的长期运行的PHP脚本,该脚本每秒查询一次该表,并执行它发现的所有新任务。如果将来需要的话,这还具有让我将来在几台工作机之间分配任务的优势。 我在重新发明轮子吗?有没有比exec()hack或MySQL队列更好的解决方案?


6
我应该在Java中使用哪个并发队列实现?
从JavaDocs: 一的ConcurrentLinkedQueue是当许多线程共享访问一个共同的集合一个合适的选择。此队列不允许空元素。 ArrayBlockingQueue是一个经典的“有界缓冲区”,其中固定大小的数组保存由生产者插入并由消费者提取的元素。此类支持可选的公平性策略,用于订购正在等待的生产者和使用者线程 与基于阵列的队列相比,LinkedBlockingQueue通常具有更高的吞吐量,但是在大多数并发应用程序中,可预测的性能较差。 我有两种情况,一种情况要求队列支持一个使用者使用许多生产者(使用它的线程),而另一种情况则相反。 我不知道要使用哪种实现。有人可以解释这些区别是什么吗? 另外,什么是“可选的公平政策” ArrayBlockingQueue?

11
堆栈和队列之间的基本区别是什么?
堆栈和队列之间的基本区别是什么? 请帮助我,我找不到区别。 您如何区分堆栈和队列? 我在各个链接中搜索了答案,然后找到了答案。 在高级编程中 堆栈定义为元素的列表或序列,可通过在现有元素的“顶部”放置新元素来加长,并通过从现有元素的顶部删除元素来缩短。它是一种ADT [Abstract Data Type],其数学运算为“ push”和“ pop”。 队列是一系列元素,可以通过将新元素放置在现有元素的后面来添加元素,并通过移除队列前面的元素来缩短元素。它是ADT [抽象数据类型]。这些术语在Java,C ++,Python等的编程中还有更多理解。 我可以得到更详细的答案吗?请帮我。
130 stack  queue 


14
固定大小的队列,可在新入队时自动使旧值出队
我正在使用 ConcurrentQueue一个共享数据结构,该结构的目的是保存传递给它的最后N个对象(历史记录)。 假设我们有一个浏览器,并且希望有最近浏览的100个Urls。我想要一个队列,当容量满(历史记录中有100个地址)时,在新条目插入(入队)时自动删除(出队)最旧的(第一个)条目。 我该如何使用System.Collections?
120 c#  queue  fifo 

5
LinkedBlockingQueue与ConcurrentLinkedQueue
我的问题涉及到这个问题,刚才问。在使用队列在生产者线程与使用者线程之间进行通信的情况下,人们通常会建议使用LinkedBlockingQueue或ConcurrentLinkedQueue吗? 与另一种相比,使用一种有什么优点/缺点? 从API角度看,我的主要区别是a LinkedBlockingQueue可以有选择地限制。

8
Java队列中的add和offer方法有什么区别?
以http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)PriorityQueue为例 谁能给我一个例子,Queue其中add和offer方法有所不同? 根据Collection文档,该add方法通常会试图确保元素存在Collection而不是添加重复元素。所以我的问题是add和offer方法之间有什么区别? 该offer方法是否会添加重复项?(我怀疑这是因为如果a Collection仅包含不同的元素,则会绕开它)。 编辑:在PriorityQueue中add和offer方法是相同的方法(见我的回答如下)。谁能给我一个与add和offer方法不同的类的示例?
109 java  queue  add 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.