如果我没听错的话,如果您使用pollLast()
,ConcurrentLinkedDeque 就可以充当堆栈吗?
现在我的问题是我需要设定 ConcurrentLinkedDeque 的大小。我的制作人不会停止,所以即使我有 16GB 的内存,我最终也会用完。那么是否可以设置固定大小?
我的实现:
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
生产者(线程1):运行queue.add(line);
消费者(线程2):运行queue.pollLast();
请注意,两个线程都在while true循环中运行。这是因为要求。这就是为什么我使用 ConcurrentLinkedDeque 而不是 ArrayBlockingQueue 或 SynchronousQueue,因为它是非阻塞的。
我还需要声明任何synchronized
吗?
最佳答案
Can
ConcurrentLinkedDeque
have a fixed size?
不,它是“基于链接节点的无界并发Deque
。”
Do I need to declare anything
synchronised
?
ConcurrentLinkedDeque
本身是线程安全的。仅复合操作(例如覆盖旧元素)需要同步。
Can
ConcurrentLinkedDeque
overwrite old elements?
我认为没有这样的方法。这是一个复合 Action ,需要
- 记住要更改的元素的位置以及之前/之后的所有元素;
- 更改元素;
- 恢复顺序(将元素放回原处)。
这三个操作应在同步
block 内执行。
关于java - ConcurrentLinkedDeque 可以有固定大小并覆盖旧元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51123435/