Как запланировать выполнение чего-то чаще, чем поминутнее?

В настоящее время, используя 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));
}

Я не проверял синтаксис предыдущего кода, поэтому вам может понадобиться проверить это.

Другие вопросы по тегам