它之所以看起来是无限循环的,是因为
myIterator.next()
直到
TimerTask
被执行,因此
myIterator.hasNext()
不是在每次循环迭代中更新。尝试移动
myIterator.next()
在外部调用
定时器任务
以及环路内部。
您还可以维护每次迭代的计数,以5秒为增量安排每个任务,以及重用
Timer
例子
我还建议使用
while
循环而不是
do-while
循环,除非您确信迭代器将始终至少有一个元素,否则您可能会得到
NoSuchElementException
。
以下是一个工作示例:
List<String> list = Arrays.asList("a", "b", "c");
Iterator<String> iterator = list.iterator();
int i = 0;
Timer timer = new Timer();
while(iterator.hasNext()) {
String value = iterator.next();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println(value);
}
};
timer.schedule(task, 5000L * i++);
}
它输出以下内容:
a // after 0 seconds
b // after 5 seconds
c // after 10 seconds