我得到一个例外:
Exception in thread "Thread-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
,例外是当我尝试从列表中删除元素然后获取第一个元素。问题是,当列表中已经没有元素时,线程想要访问第一个元素。但我确实将synchronized
放在方法存根中。有什么问题?
private static ArrayList<Pracownik> LIST;
public static synchronized void roll(){
if (LIST.size() > 0) {
LISTA.remove(0);//removing from list
String initials = LISTA.get(0).getInijcaly(); //here is exception
}
}
答案 0 :(得分:6)
这不一定是线程问题。
再次查看调用顺序:
// check that the list has at least 1 element
if (ISTA.size() > 0) {
// remove 1 element
LISTA.remove(0);
// list might have 0 elements at this point
LISTA.get(0);
}
在这里检查列表是否至少有1个元素,然后删除一个元素,然后尝试检索另一个元素。如果列表的大小为1,这将抛出异常。
假设ISTA
/ LIST
/ LISTA
都是一样的,那些只是错别字。 (否则,如果它们不同,那么您正在检查错误列表的大小......)
该片段太小,无法确定解决问题的正确方法是什么,坦白地说,解决问题应该是微不足道的。
您需要:
答案 1 :(得分:0)
这是您尝试访问该元素的方式的问题。您可以尝试使用以下方法。
if (LISTA.size() > 0) {
LISTA.remove(0);
if(LISTA.size() >= 1){
LISTA.get(0).getInijcaly();
}
}