java - LinkedList 上的 ArrayIndexOutOfBoundsException : -32443 with iterator . 下一个

标签 java jakarta-ee indexoutofboundsexception

在我的 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/

相关文章:

java - 在 Android 中使用 java 单例类完成常见任务

java - 将 @Autowired 与在 Spring Boot 中配置的过滤器一起使用

java - 了解 EJB3/JPA 容器级事务和隔离级别

java - 获取 IndexOutOfBoundsException : -1 when no negative numbers are involved

android - ListView 中的 OutOfBoundsException

java - Guice - 绑定(bind)由辅助注入(inject)工厂创建的实例

java - Python 到 Java 加密/解密,确保密码匹配?

java - JPA中的乐观锁是什么?

java - Tomcat JDBC 池连接全部卡在Socket Read,没有创建新连接

java - 尝试在 ListView 中更新从 SQLite 检索到的值时应用程序崩溃