TimerTask를 사용하여 매일 실행하도록 스레드를 예약하고 있습니다. 여기에 코드가 있습니다.자바에서 TimerTask로 일정이 비정상적으로 지연됩니다.
private void scheduleDailyProcess() {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 5);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Timer timer = new Timer();
int period = 24 * 60 * 60 * 1000; //24 hours
timer.schedule(new DailyProcess(), c.getTime(), period);
}
매일 00:05에 스레드를 실행하고 싶습니다. 그러나 스레드가 8 초의 지정되지 않은 지연으로 시작한다는 것을 알았습니다.
코드에 뭔가 빠졌습니까? 아니면 TimerTask에 문제가 있습니까?
DailyProcess 내에 지연이 없습니다.
어디에서 델타를 얻고 있습니까? 프로그램에 타이밍 출력이 있습니까? – Max
예 로그에서 8 초 지연을 볼 수 있습니다. –
'TimerTask'는 정확한 실행 시간을 약속하지 않습니다. 사실, 문서화는 그것에 대해 아주 명백합니다. 정밀도가 필요하다면 Quartz 프레임 워크 -> http://quartz-scheduler.org/를 사용하는 것이 좋습니다. –