【发布时间】:2013-05-29 18:10:02
【问题描述】:
我正在尝试调整我对核心 Java 和多线程的概念。在阅读我发现的一些书时
如果向量被另一个线程以某种方式访问,下面的代码可能会抛出ArrayIndexOutOfBoundsException。
for (int i = 0; i < vector.size(); i++){
doSomething(vector.get(i));
}
我确实尝试了很多但无法弄清楚如何? 谁能帮我解决这个问题。
【问题讨论】:
-
仅从这段代码,是不可能说的。
doSomething是做什么的?是否有任何其他线程可能并行访问vector? -
如果另一个线程在你处理它时删除了向量的一个元素,你可能会得到那个异常
-
vector.get(i)如果i大于向量的当前元素计数,将抛出异常。 -
一个线程正在运行该代码。它检查
i是否小于向量的大小。在它执行vector.get()之前,其他一些线程可以删除向量中的一个元素。当第一个线程到达get()时,它将失败,因为向量中不再有那么多元素。 -
@OliCharlesworth 这个例子只有这个片段,我现在明白了。最初我认为仅此代码就可以抛出此异常。现在我意识到
标签: java multithreading exception vector