... ну, hasNext () возвращает false, как только вы достигли конца списка.Пожалуйста, оставьте свой код, чтобы увидеть, что не так.Либо у вас нет ожидаемых элементов в вашем списке, либо вы вызываете next () чаще, чем ожидаете.
Редактировать: Действительно, поскольку он многопоточный, Нишант сказал правильно, проверьте, что ваш список является потокбезопасно с помощью:
List list = Collections.synchronizedList(new LinkedList(...));
Редактировать 2:
Возможно, два потока одновременно получают доступ к списку.Если ошибка иногда возникает, иногда нет, это может иметь место.
Если у вас есть такой кусок кода, работающий в нескольких потоках:
if (it.hasNext())
T elem = it.next()
process(elem)
Это может быть так: Поток 1и 2 говорят: «Хорошо, есть следующий элемент», затем переключаем контекст, затем оба снова запускаются через некоторое время, и оба хотят получить элемент, хотя доступен только один.
Чтобы решить эту проблему, выполнитеваш метод синхронизирован
synchronized void processItem(Iterator<T> it)
{
if (it.hasNext())
T elem = it.next()
process(elem)
}