在我的游戏中,我从客户端接收输入作为事件,并将它们存储在队列中。
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
。现在我不确定最好的解决方案是对队列进行处理吗?
我应该在这里使用synchronized
块吗? Collections.synchronizedList()
,CopyOnWriteArrayList
,BlockingQueue
?
我可以维护一个单独的队列,然后使用unprocessedEvents
将新队列添加到addAll()
吗?