这段代码:
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 = Array Index Out Of Bounds Exception 代码不完整,减少到需要的部分。但是为了让你开心,OFFSET 是 4,想象一下有一个 for 循环在开头添加了一点数据。第二个线程读取和/或修改列表。
编辑2:
我注意到在绘制列表并且当前游戏结束时会发生这种情况。清空列表时,绘制线程尚未绘制所有元素。有没有办法告诉游戏等待清空列表直到它为空?
编辑3:
我刚刚注意到我不确定这是否是多线程问题。似乎我只有 2 个线程,一个用于计算和绘图,一个用于用户输入。我需要比我想象的更多地研究这个问题。