gpt4 book ai didi

java - 在另一个线程中迭代时添加到队列

转载 作者:行者123 更新时间:2023-11-30 05:40:25 25 4
gpt4 key购买 nike

在我的游戏中,我从客户端接收输入作为事件,并将其存储在队列中。

private Queue<Event> unprocessedEvents = new LinkedList<>();

@Override
public void onEvent(@NotNull Event event) {
unprocessedEvents.add(event);
}

队列在服务器的单独线程上每秒处理 10 次。

Iterator<Event> eventIterator = unprocessedEvents.iterator();
while (eventIterator.hasNext()) {
Event event = eventIterator.next();

//Handle the input from the client/server
Event event = input(event);

//Remove the event from the unprocessed inputs
eventIterator.remove(); //ConcurrentModificationException
}

有时,当我在迭代队列时尝试插入事件时,会收到 ConcurrentModificationException。现在我不确定处理队列的最佳解决方案是什么?

我应该在这里使用同步 block 吗? Collections.synchronizedList()CopyOnWriteArrayListBlockingQueue

我可以维护一个单独的队列并使用 addAll() 将新队列添加到 unprocessedEvents 吗?

最佳答案

您可能想使用ConcurrentLinkedQueue因为它 native 处理并发线程访问。

关于java - 在另一个线程中迭代时添加到队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768515/

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