假设我想在某个特定时间开始执行线程,在我想要的时间,我如何在下面的代码中设置时间,以便我可以在特定时间启动线程,然后相同的线程将保持在给定的时间间隔后执行。 (在示例代码中,假设我想在午夜启动蜂鸣器,我该怎么做?
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}
提前致谢。
答案 0 :(得分:6)
有关高级计划的需求,请查看Quartz job scheduler。
答案 1 :(得分:1)
如果您想在午夜之后运行蜂鸣器,则需要更改传递给调度程序的initialDelay
。通过从午夜减去当前时间计算出您需要多少延迟。如下所示:
private static Date getMidnight(){
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH,1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
long initialDelay = (getMidnight().getTime() - System.currentTimeMillis())/1000;
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, initialDelay, 10, SECONDS);
答案 2 :(得分:0)
最初通过检查当前时间与您希望运行任务的时间之间的差异来安排它。然后使用scheduleAtFixedRate .. 但是要注意,线程不需要在您需要的时间安排..