如果我理解正确,那么在使用pollLast()的情况下,ConcurrentLinkedDeque充当堆栈的权利?

现在我的问题是我需要一个固定大小的ConcurrentLinkedDeque。我的制作人不会停下来,所以即使我有16GB的内存,我最终也会用光。所以有可能设置一个固定的大小吗?

我的实现:

ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();


生产者(线程1):运行queue.add(line);
使用者(线程2):运行queue.pollLast();

请注意,两个线程都在while true循环中运行。这是由于要求。这就是为什么我使用ConcurrentLinkedDeque而不是ArrayBlockingQueueSynchronousQueue的原因,因为它是非阻塞的。

我还需要声明什么synchronised吗?

最佳答案

ConcurrentLinkedDeque的大小可以固定吗?


不,它是“基于链接节点的无限制并发Deque”。


  我需要声明什么synchronised吗?


ConcurrentLinkedDeque本身是线程安全的。仅对于复合操作(例如覆盖旧元素)才需要同步。


  ConcurrentLinkedDeque可以覆盖旧元素吗?


我认为没有这种方法。这是一个需要采取的综合行动


记住要更改的元素的位置以及之前/之后的所有元素;
改变元素;
恢复顺序(将元素放回原处)。


这三个动作应在synchronized块内执行。

10-08 01:31