我想在每天的7.11pm的特定时间运行任务。
我已经尝试了以下代码,但无法正常工作。
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
System.out.println(new Date());
System.out.println("Hello !!");
}
};
Calendar calendar = Calendar.getInstance();
long now = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR, 18);
calendar.set(Calendar.MINUTE, 11);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, calendar.getTimeInMillis(), 5, TimeUnit.SECONDS);
}
}
在上面的代码中,我尝试从每天晚上7:11开始运行调度任务,间隔为5秒。但这并不像我预期的那样。另外,如果我想对另一个条件执行相同的操作,即该任务只能在特定的日期执行,则可以说每个星期二和星期三。
我在计算方法的initialDelay参数时是否犯了某种错误?
最佳答案
最好是ScheduledExecutorService。
但是也许也可以使用计时器。为了摆动另一个计时器。
这是一个示例(可以通过取消/清除来停止timer和timerTask)。
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimeScheduleTest {
Timer timer = new Timer();
public static void main(String[] args) {
new TimeScheduleTest().startApp();
}
private void startApp() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 11);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
timer.scheduleAtFixedRate(new StartTimer(), calendar.getTime(), 5000);
}
class StartTimer extends TimerTask {
public void run() {
System.out.println(new Date());
System.out.println("Hello !!");
}
}
}
关于java - 如何为ScheduledExecutorService#scheduleAtFixedRate计算initialDelay,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41428252/