为什么会有这段代码:
public synchronized void update() {
for(T event : eventQueue)
{
processEvent(event);
}
events = eventQueue;
eventQueue = new LinkedList<T>();
}
运行方式与此代码不同:
public synchronized void update() {
for(T event : eventQueue)
{
processEvent(event);
}
events = eventQueue;
eventQueue.clear();
}
第一个版本工作得很好,但第二个版本不行。这eventQueue.clear();
会导致应用程序不接收任何事件并以Concurrent Exception
.
我的应用程序有两个线程。UI 线程和 GameLoop 线程。UI线程将事件添加到eventQueue
这样的:
public synchronized void addEvent(T newEvent) {
eventQueue.add(newEvent);
}
GameLoop 线程调用 update 方法来events
获取eventQueue
.
所有代码都可以从这个网站查看:http ://entropyinteractive.com/2011/02/game-engine-design-input/
这对我来说似乎有点神秘,因为我认为eventQueue = new LinkedList<T>();
并且eventQueue.clear();
都会导致空LinkedList
?我相信它与建立一个新的参考有关(但为什么?!)。