在我的 EJB 应用程序(Java EE)上,我将一个列表(LinkedList)插入到数据库中,但出现错误: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来查找数据插入到链接列表中,然后通过如上所述迭代发送列表来插入,随机出现错误。
谁能帮忙找到线索吗?还是因为我使用LinkedList,对象的大小不够?
最佳答案
我认为该列表不是线程安全的。如果列表被多个线程访问,而另一个线程此时访问最后一个元素,则 iterator.hasNext() 为 true。但是,当另一个线程执行 iterator.next() 时,您会尝试访问下一个不可用的元素。事实上,错误随机发生是另一个暗示。在这种情况下,使用线程安全列表是一个好主意。否则需要手动同步列表:
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
关于java - LinkedList 上的 ArrayIndexOutOfBoundsException : -32443 with iterator . 下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7307242/