草庐IT

ConcurrentLinkedQueue

全部标签

java - Java 中的 LRU 缓存实现

我看过下面的代码,我认为addElement方法的实现中有一个无用的while循环。它不应该碰巧有比size+1更多的元素,因为已经有一个写锁。那么为什么addElement方法要删除元素直到它得到这个条件是的while(concurrentLinkedQueue.size()>=maxSize)任何关于此的指示都会很棒。这里是实现:publicclassLRUCache{privateConcurrentLinkedQueueconcurrentLinkedQueue=newConcurrentLinkedQueue();privateConcurrentHashMapconcurr

java - Junit 测试并发

我正在尝试在通过多线程访问时测试java.util.concurrent.ConcurrentLinkedQueue。下面提到的是我使用RepeatedTest在两个并发线程中运行的Junit测试。我的问题是:使用RepeatedTest在ConcurrentLinkedQueue上测试并发性是否正确?源代码如下。谢谢importjava.util.concurrent.ConcurrentLinkedQueue;importjunit.extensions.ActiveTestSuite;importjunit.extensions.RepeatedTest;importjunit.

带有 ConcurrentLinkedQueue$Node 的 Java 内存 "Leak"

我遇到了一个有趣的难题,我似乎有内存泄漏(或不断增长的数据结构)。当我分析我的内存使用情况时,我得到了典型的“随时间线性增加”的图表。为了找出问题的原因,我进行了堆转储。我发现超过50%的内存分配给ConcurrentLinkedQueue节点。内存消耗最大的是com.singularity.ee.agent.util.ch和java.util.concurrent.ConcurrentLinkedQueue$Node,如下图所示。我不知道util.ch是什么,但它似乎与节点相关联,因为每个ch都有一个对节点的直接引用,所以不用担心关注它。现在尝试为$Node查找最近的GC的引用,我得

java - 防止 ConcurrentLinkedQueue<T> 出现内存不足异常

使用ConcurrentLinkedQueue时,如何限制队列的大小。是否有可能通过内存不足异常? 最佳答案 ConcurrentLinkedQueue的大小是无限的,所以如果生产者放入元素的速度快于消费者移除元素的速度,最终它确实会耗尽你的内存。如果你想限制队列的大小,试试阻塞队列,比如LinkedBlockingQueue或ArrayBlockingQueue反而。第一个的大小可以有选择地限制,而第二个总是有限制的。 关于java-防止ConcurrentLinkedQueue出现内

java - ConcurrentLinkedQueue代码解释

http://www.java2s.com/Open-Source/Java-Open-Source-Library/7-JDK/java/java/util/concurrent/ConcurrentLinkedQueue.java.htm以上是ConcurrentLinkedQueue的源码。我无法理解一种情况。条件(p==q)将如何出现在下面的代码片段中,来自offer方法publicbooleanoffer(Ee){checkNotNull(e);finalNodenewNode=newNode(e);for(Nodet=tail,p=t;;){Nodeq=p.next;if(

java - 为什么 Queue.poll 比 Iteration 快? (java.util.concurrent.ConcurrentLinkedQueue)

我有一段代码可以从队列中获取所有元素。之后我不关心队列的状态,我可以确信在我从队列中删除元素时队列不会被修改。我最初使用迭代器来提取元素,因为我认为它比轮询元素更快...但我运行了以下测试:ConcurrentLinkedQueuequeue=newConcurrentLinkedQueue();for(inti=0;ilist=newLinkedList();longstart=System.currentTimeMillis();for(Objectobject:queue)list.add(object);longtime1=System.currentTimeMillis()-

java - 在外部修改时流式传输并发集合是否安全?

我有一个被多个线程访问的ConcurrentLinkedQueue;其中的对象是不可变的。在一个线程中,我需要数据的快照,这是通过调用stream来实现的。安全吗?我知道non-interference要求,但它似乎是在谈论对流操作之一的修改(“源可能不是并发的流管道永远不应该修改流的数据源”),不一定是外部的。此外,ConcurrentLinkedQueue是为并发访问而设计的,所以就是这样。 最佳答案 来自您提供的链接中的文档Formostdatasources,preventinginterferencemeansensuri

Java,ConcurrentLinkedDeque 与 ConcurrentLinkedQueue - 区别是什么?

ConcurrentLinkedDeque和ConcurrentLinkedQueue的API链接:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html两者有什么区别?第一个,DeQueue方法多了很多,但是两者根本的区别是什么? 最佳答案

java - 当我们有 LinkedBlockingQueue 时,为什么要使用 ConcurrentLinkedQueue?

我为什么要使用ConcurrentLinkedQueue当我有LinkedBlockingQueue?我知道ConcurrentLinkedQueue是非阻塞的但是LinkedBlockingQueue可以用作ConcurrentLinkedQueue.我会用put()/offer()插入方法和poll()去除方法。poll()如果队列为空,方法不会等待。LinkedBlockingQueue也是无界的。所以我可以使用它。到目前为止我发现的差异是ConcurrentLinkedQueue在LinkedBlockingQueue时使用带有比较和交换的硬件级同步机制正在使用Reentran

java - ConcurrentLinkedQueue$Node 在 remove() 之后保留在堆中

我有一个写入和读取ConcurrentLinkedQueue的多线程应用程序,它在概念上用于支持列表/表中的条目。我最初为此使用了ConcurrentHashMap,效果很好。一项新要求需要跟踪进入的订单条目,因此可以根据某些条件以最旧的顺序删除它们。ConcurrentLinkedQueue似乎是一个不错的选择,而且在功能上它运行良好。可配置数量的条目保存在内存中,当达到限制时提供新条目时,将以最早的优先顺序搜索队列以查找可以删除的条目。某些条目不会被系统删除并等待客户端交互。似乎正在发生的事情是我在发生的队列前面有一个条目,比如100K条目之前。该队列似乎配置的条目数量有限(siz
12