ConcurrentLinkedDeque 能否具有固定大小并覆盖旧元素?

Can ConcurrentLinkedDeque have a fixed size and overwrite old elements?

如果我没看错的话 ConcurrentLinkedDeque 可以作为一个堆栈,如果你使用 pollLast() ?

现在我的问题是我需要一组大小的 ConcurrentLinkedDeque。我的制作人不会停止,所以即使我有 16GB 的内存,我最终也会 运行 出来。那么是否可以设置固定大小?

我的实现:

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

生产者(线程 1):运行s queue.add(line); 消费者(线程 2):运行s queue.pollLast();

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

我还需要申报什么吗synchronised

Can ConcurrentLinkedDeque have a fixed size?

不,是"an unbounded concurrent Deque based on linked nodes."

Do I need to declare anything synchronised?

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

Can ConcurrentLinkedDeque overwrite old elements?

我认为没有这样的方法。这是一个复合动作,需要

  • 记住您要更改的元素的位置以及所有出现的元素 before/after;
  • 更改元素;
  • 恢复顺序(放回元素)。

这三个动作应该在一个 synchronized 块中执行。