このコード:
synchronized (mList) {
if (mList.size() != 0) {
int s = mList.size() - 1;
for (int i = s; i > 0; i -= OFFSET) {
mList.get(i).doDraw(canv);
}
getHead().drawHead(canv);
}
}
AIOOBEをランダムにスローします。私が読んだことから、同期はそれを防ぐはずです、それで私は何が間違っているのですか?
編集:
AIOOBE =範囲外の配列インデックスの例外コードが不完全で、必要なものに切り詰められています。しかし、あなたを幸せにするために、OFFSETは4であり、最初に少しのデータを追加するforループがあると想像してください。そして、2番目のスレッドがリストを読み取ったり変更したりします。
編集2:
リストが描画されていて、現在のゲームが終了したときに発生することに気づきました。リストが空になったときに、draw-threadがすべての要素を描画したわけではありません。リストが空になるまでリストを空にして待つようにゲームに指示する方法はありますか?
編集3:
これがマルチスレッドの問題であるかどうかわからないことに気づきました。計算と描画用とユーザー入力用の2つのスレッドしかないようです。これについては、思ったよりも少し詳しく調べる必要があります。