首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间怎么设置?

时间怎么设置?
EN

Stack Overflow用户
提问于 2011-01-17 17:15:13
回答 3查看 810关注 0票数 4

假设我想在某个特定的时间开始线程的执行,在我想要的时间,我如何在下面的代码中设置时间,这样我就可以在特定的时间启动线程,并且在给定的时间间隔之后,相同的线程将继续执行。(在示例代码中,假设我想在午夜启动蜂鸣器,我该怎么做呢?

代码语言:javascript
复制
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);
 }
}

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-17 17:39:30

如果您希望在午夜后运行蜂鸣器,则需要更改传递到调度程序中的initialDelay。从午夜减去当前时间,算出你需要多长时间。如下所示:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2011-01-17 17:19:00

查看TimerTimerTask类。

对于高级调度需求,请查看Quartz job scheduler

票数 6
EN

Stack Overflow用户

发布于 2011-01-17 17:25:44

最初,通过检查当前时间和要运行任务的时间之间的差异来安排它。然后使用scheduleAtFixedRate..但是,请注意,线程不需要在您需要的确切时间进行调度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4711539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档