ArrayIndexOutofBoundSexception:-32443 with Iterator .next on LinkedList
-
26-10-2019 - |
質問
EJBアプリ(Java EE)で、リスト(linkedlist)を進めてdbに挿入します。
私はASをコーディングします
Iterator itertator = myList.iterator();
while (itertator.hasNext()) {
MyObject myObject = (MyObject) itertator.next();
...
}
すでにiteratorを使用しているのだろうか。
フルログ:
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クライアントからアクセスされます。リストは、クライアントからIDを取得してLinkedListにデータ挿入を見つけ、ランダムに繰り返して挿入するようにリストを送信することにより、EJB自体に実装されます。エラーが発生しました。
誰かが手がかりを見つけるのを手伝うことができますか?または、LinkedListを使用しているため、オブジェクトのサイズは十分ではありませんか?
解決
リストがスレッド安全ではないと思います。リストがいくつかのスレッドでアクセスされた場合、他のスレッドは現時点で最後の要素にアクセスします、 iterator.hasNext()
本当です。しかし、別のスレッドがするとき iterator.next()
, 、次に、利用できない次の要素にアクセスしようとします。事実、それはエラーがランダムに発生することです。そのための別のヒントです。この場合、スレッドセーフリストを使用することは良い考えです。それ以外の場合は、リストを手動で同期することが必要です。
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
所属していません StackOverflow