Как запланировать выполнение чего-то чаще, чем поминутнее?
В настоящее время, используя cron4j
Я могу запланировать выполнение события, скажем, 13:01. Хотя хорошо, насколько я понимаю, это не позволяет запланировать событие в 13:01:10 (через 10 секунд).
Есть ли инструмент, который позволяет такую гранулярность в планировании?
4 ответа
Если вы ищете библиотеку, вы должны посмотреть на Quartz. Это очень гибкий планировщик.
В Java вы можете запланировать задачу, используя класс задач Timer и Timer, например, демо
import java.util.Timer;
import java.util.TimerTask;
public class MyTask extends TimerTask{
Timer timer;
int count=0;
public MyTask(){
}
public MyTask(Timer timer){
this.timer=timer;
}
public void toDo(){
System.out.println("count-> "+(count++));
}
@Override
public void run() {
toDo();
if(count>10){//this is the condition when you want to stop the task.
timer.cancel();
}
}
}
для этого таймера вы можете запустить это следующим образом
public static void main(String[] args){
Timer timer=new Timer();
MyTask myTask=new MyTask(timer);
int firstSart=1000;// it means after 1 second.
int period=1000*2;//after which the task repeat;
timer.schedule(myTask,firstSart,period);//the time specified in millisecond.
}
Как насчет класса Таймер? Это позволяет планировать исполнения через равные промежутки времени с точностью до миллисекунды.
Лично я нахожу кварц очень сложным и сильным планировщиком, поэтому начинать с него нелегко. Это может быть не эффективным решением, но вы можете sleep(long)
перед выполнением задания, запланированного каждую минуту.
public void execute(TaskExecutionContext context){
sleep(TimeUnit.SECONDS.toMilliseconds(10));
}
Я не проверял синтаксис предыдущего кода, поэтому вам может понадобиться проверить это.