假设我想在某个特定的时间开始线程的执行,在我想要的时间,我如何在下面的代码中设置时间,这样我就可以在特定的时间启动线程,并且在给定的时间间隔之后,相同的线程将继续执行。(在示例代码中,假设我想在午夜启动蜂鸣器,我该怎么做呢?
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);
}
}提前谢谢。
发布于 2011-01-17 17:39:30
如果您希望在午夜后运行蜂鸣器,则需要更改传递到调度程序中的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);发布于 2011-01-17 17:19:00
对于高级调度需求,请查看Quartz job scheduler。
发布于 2011-01-17 17:25:44
最初,通过检查当前时间和要运行任务的时间之间的差异来安排它。然后使用scheduleAtFixedRate..但是,请注意,线程不需要在您需要的确切时间进行调度。
https://stackoverflow.com/questions/4711539
复制相似问题