ArrayIndexOutOfBoundsException:-32443,在LinkedList上使用iterator .next

时间:2011-09-05 11:16:08

标签: java java-ee indexoutofboundsexception

在我的EJB应用程序(Java EE)上,我继续列表(LinkedList)以插入到db中,我收到错误:ArrayIndexOutOfBoundsException:-32443

我编码为

Iterator itertator = myList.iterator();
while (itertator.hasNext()) {         
    MyObject myObject = (MyObject) itertator.next();
    ...
}

我想知道我已经使用iterator.next为什么它可以有indexOutOfBound?

完整日志:

Error message: java.lang.ArrayIndexOutOfBoundsException: -32443; nested exception is: com.my.exception.MyException
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapEJBException(RemoteExceptionMappingStrategy.java:411)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapException(RemoteExceptionMappingStrategy.java:113)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException(RemoteExceptionMappingStrategy.java:203)
at com.ibm.ejs.container.EJSDeployedSupport.setUncheckedException(EJSDeployedSupport.java:296)

我的EJB应用程序由Java客户端以多线程方式访问,该列表在EJB本身中实现,方法是从客户端获取id以查找插入到链表中的数据,然后通过迭代将列表发送到insert,如上所述,随机出错。

任何人都可以帮忙找到线索?或者问题是因为我使用的是LinkedList,对象的大小还不够?

1 个答案:

答案 0 :(得分:1)

我认为该列表不是线程安全的。如果列表由多个线程访问,另一个线程此时访问最后一个元素,则iterator.hasNext()为真。但是当另一个线程执行iterator.next()时,您尝试访问下一个不可用的元素。事实上,即错误随机发生是另一个暗示。在这种情况下,使用线程安全列表是个好主意。否则,必须手动同步列表:

synchronized(list) {
    Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
        foo(i.next());
}