如果我理解正确,那么在使用pollLast()
的情况下,ConcurrentLinkedDeque充当堆栈的权利?
现在我的问题是我需要一个固定大小的ConcurrentLinkedDeque。我的制作人不会停下来,所以即使我有16GB的内存,我最终也会用光。所以有可能设置一个固定的大小吗?
我的实现:
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
生产者(线程1):运行
queue.add(line);
使用者(线程2):运行
queue.pollLast();
请注意,两个线程都在while true循环中运行。这是由于要求。这就是为什么我使用
ConcurrentLinkedDeque
而不是ArrayBlockingQueue
或SynchronousQueue
的原因,因为它是非阻塞的。我还需要声明什么
synchronised
吗? 最佳答案
ConcurrentLinkedDeque
的大小可以固定吗?
不,它是“基于链接节点的无限制并发Deque
”。
我需要声明什么synchronised
吗?ConcurrentLinkedDeque
本身是线程安全的。仅对于复合操作(例如覆盖旧元素)才需要同步。
ConcurrentLinkedDeque
可以覆盖旧元素吗?
我认为没有这种方法。这是一个需要采取的综合行动
记住要更改的元素的位置以及之前/之后的所有元素;
改变元素;
恢复顺序(将元素放回原处)。
这三个动作应在synchronized
块内执行。