gpt4 book ai didi

java - java中有并发循环链接队列集合吗?

转载 作者:行者123 更新时间:2023-12-02 01:18:36 25 4
gpt4 key购买 nike

我需要以循环并发方式从队列中获取数据。我正在寻找一个实现这种行为的集合。经过一番挖掘,我找不到一个。我将如何实现?我正在查看 ConcurrentLinkedQueue,但我不知道如何使其循环。我需要这个集合具有高性能。

我猜我可以用ConcurrentLinkedDeque来做到这一点。通过使用迭代器,我应该能够一直迭代到末尾,一旦到达末尾,我就可以重新创建迭代器并从头开始。

================================更新================== =========

在初始化阶段,多个线程将把元素添加到此类集合中。并发收集的状态对于一次使用其中一项的消费者线程来说是正确可见的。一旦应用程序处于运行状态,元素将不会添加到集合中。每个线程以循环方式一次仅迭代和消耗一个元素。

最佳答案

鉴于您修改后的问题,我建议如下:

对于初始化阶段,使用并发QueueDeque来累积元素。任何实现都可以。

该阶段完成后,从队列对象创建以下 RoundRobin 类的实例,并使用其 get 方法循环访问其元素。

public class RoundRobin <E> {
private final AtomicInteger next = new AtomicInteger(0);
private final E[] elements;

public RoundRobin(Collection<E> queue, Class<E> clazz) {
this.elements = queue.toArray(Array.newInstance(clazz, 0));
}

public E get() {
return elements[next.getAndIncrement() % elements.length];
}
}

RoundRobin 类是线程安全的,get 是并发的。

如果在构建 RoundRobinelements 集合发生变化,则生成的 RoundRobin 状态可能不会 与队列的最终状态相同。从我阅读您提出的要求来看,这是可以的。

关于java - java中有并发循环链接队列集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151345/

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