なぜこのコードは:
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();
}
最初のバージョンは問題なく動作しますが、2 番目のバージョンは機能しません。これeventQueue.clear();
により、アプリはイベントを受信せず、Concurrent Exception
.
私のアプリには 2 つのスレッドがあります。UI スレッドと GameLoop スレッド。UI スレッドはイベントを次のeventQueue
ように追加します。
public synchronized void addEvent(T newEvent) {
eventQueue.add(newEvent);
}
GameLoop スレッドは update メソッドを呼び出してevents
、eventQueue
.
すべてのコードは、次の Web サイトから表示できます: http://entropyinteractive.com/2011/02/game-engine-design-input/
と の両方が空の結果になるeventQueue = new LinkedList<T>();
と思ったので、これは私にはちょっと不思議に思えます? 私はそれが新しい参照を確立することと関係があると信じています (しかし、なぜ?!)。eventQueue.clear();
LinkedList