Вот фрагмент кода:
Timer t = new Timer();
TimerTask task = new TimerTask() {
int i = 0;
int longTimeJobPoint = 2;
@Override
public void run() {
System.out.println(new Date());
if(++i == longTimeJobPoint) {
try {
System.out.println("sleeping time...");
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
//every 10 sec
t.scheduleAtFixedRate(task, new Date(), 10000);
Результат выглядит следующим образом:
Sat Oct 19 10:44:59 CST 2013
Sat Oct 19 10:45:09 CST 2013
sleeping time...
Sat Oct 19 10:45:39 CST 2013 //piled task
Sat Oct 19 10:45:39 CST 2013 //piled task
Sat Oct 19 10:45:39 CST 2013
Sat Oct 19 10:45:49 CST 2013
Как мы видим, когда Thread.sleep()
задерживается на 30 секунд, запланированный таймер складывает задачи, которые должны запускаться каждые 10 секунд. Я хочу пропустить задачи, которые были отложены из-за того, что последняя задача еще не завершена. И вывод должен быть таким:
Sat Oct 19 10:44:59 CST 2013
Sat Oct 19 10:45:09 CST 2013
sleeping time...
Sat Oct 19 10:45:39 CST 2013
Sat Oct 19 10:45:49 CST 2013
Может ли кто-нибудь помочь мне? Большое спасибо!