开发者

ArrayIndexOutOfBoundsException: -32443 with iterator .next on LinkedList

开发者 https://www.devze.com 2023-04-02 06:20 出处:网络
On my EJB App (Java EE), I proceed a list (LinkedList) to insert into db and I got error: ArrayIndexOutOfBoundsException: -32443

On my EJB App (Java EE), I proceed a list (LinkedList) to insert into db and I got error: ArrayIndexOutOfBoundsException: -32443

I code as

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

I wonder as I already use iterator.next why it could has indexOutOfBound?

Full log:

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)

My EJB App is accessed by a Java client in multi-threading, the list is implemented in EJB itself by taking th开发者_如何学运维e id from the client to find data insert into a linkedlist and then send the list to insert by iterating as above, by randomly it got error.

Anyone could help to find the clue? Or the issue because I am using LinkedList, the size of the object is not enough?


I'd assume that the list isn't thread safe. In case the list is accessed by a number of threads an an other thread accesses the last element at the moment, the iterator.hasNext() is true. But when another thread does a iterator.next(), then you try to access the next element that isn't available. The fact, that is error happens randomly is another hint for that. Using a thread safe list would be a good idea in this case. Otherwise manually synchronizing the list is necessary:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号