Timetask всегда выполнять

я хочу запускать свой код каждую среду каждую неделю в полночь.

public class Autonom extends TimerTask {

public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar data = Calendar.getInstance();
    data.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
    data.set(Calendar.HOUR_OF_DAY, 0);
    data.set(Calendar.MINUTE, 0);
    data.set(Calendar.SECOND, 0);
    data.set(Calendar.MILLISECOND, 0);
    timer.schedule(new Autonom(), data.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));

}

@Override
public void run() {
...
}

}

Проблема в том, что при запуске этого кода метод run выполняется каждый раз. Так в чем проблема?

1 ответ

  1. Вы используете текущее время и установите его на полночь в среду. Поскольку сегодня пятница, среда в прошлом.

    Из документа вы можете увидеть, что произойдет в этом случае

    если запланированный первый раз в прошлом, он запланирован для немедленного выполнения.

    Если вы хотите дождаться следующей среды, чтобы начать выполнение, увеличьте неделю.

    data.add(Calendar.WEEK_OF_YEAR, 1);
    

    Это будет дата в futur и будет ждать до тех пор, чтобы начать первое исполнение.