gpt4 book ai didi

java - 如何通过多线程迭代concurrentLinkedQueue?

转载 作者:行者123 更新时间:2023-11-29 04:27:52 26 4
gpt4 key购买 nike

在我的应用程序中,数据生成速度(存储在 concurrentLinkedQueue 中)大于我可以使用单线程消耗的速度。

我决定先创建 4 个线程来使用数据,以防止我的应用程序出现“内存不足异常”。

问题:

  • 针对上述问题还有其他更好的设计示例吗?
  • 我们可以使用多个线程迭代 concurrentLinkedQueue 并在迭代时删除元素吗?

Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a ConcurrentLinkedQueue happen-before actions subsequent to the access or removal of that element from the ConcurrentLinkedQueue in another thread.

最佳答案

我认为你不应该迭代,而是创建 4 个线程,每个线程从队列中轮询数据,这样轮询数据将被删除或换句话说被消耗

// your queue
ConcurrentLinkedQueue concurrentLinkedQueue = new ConcurrentLinkedQueue();

// create 4 Threads
for (int i = 0; i < 4; i++) {
new Thread(() -> {
while (!concurrentLinkedQueue.isEmpty()) {
// consume element
var element = concurrentLinkedQueue.poll();

// do something with element
// here
}
}).start();
}

关于java - 如何通过多线程迭代concurrentLinkedQueue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290975/

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