gpt4 book ai didi

java - ConcurrentLinkedDeque 可以有固定大小并覆盖旧元素吗?

转载 作者:行者123 更新时间:2023-11-30 02:06:42 26 4
gpt4 key购买 nike

如果我没听错的话,如果您使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com