【发布时间】:2011-11-06 00:25:27
【问题描述】:
这段代码:
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:
我注意到在绘制列表并且当前游戏结束时会发生这种情况。清空列表时,绘制线程尚未绘制所有元素。有没有办法让游戏等待清空列表,直到它为空?
编辑 3:
我刚刚注意到我不确定这是否是多线程问题。似乎我只有 2 个线程,一个用于计算和绘图,一个用于用户输入。我必须比我想象的多研究一下。
【问题讨论】:
-
IOORE?请扩展为一个完整的异常名称 - 我敢说我们可以在一段时间后弄清楚你的意思,但如果你真的告诉我们开始,那会简单得多。
-
您的代码看起来不完整。数据在哪里添加到列表中(并且,就此而言,删除)?
OFFSET是什么? -
如果你说的是
ArrayIndexOutOfBoundsException,我通常缩写为aioobe ;-) -
只有我可以看到 doDraw(canv) 从同一个列表中删除多个对象,然后如果 OFFSET = 1 则下一个 i 将不存在
-
与您的问题无关:您确定要
i > 0而不是i >=0?
标签: java android synchronized synchronized-block