在特定时间内运行Java程序



我需要帮助在特定时间(如下午2点)在服务器上运行Java程序(为新文件编制索引)。

有人告诉我Java有一种叫做jobs的东西,但我不知道如何使用它。我试过这个:

 boolean cond=true;
 while(cond){
     @SuppressWarnings("deprecation")
     int heur = new Date().getHours();
     @SuppressWarnings("deprecation")
     int minute= new Date().getMinutes();
     if(heur==16 && minute==02){
         indexer.close();
         end = new Date().getTime();
         File f;
         cond=false;
     }

但有了这一点,该程序仍在运行。

如何在指定时间运行程序?

有一个名为Quartz的API,它是你的程序可以调度"Jobs"的地方,它将在那时运行它。

在我给出一个例子之前,请尝试这个链接。

编辑:首先,你必须创建一个实现org.quartz.Job的类。当你实现它时,你必须实现方法execute(JobExecutionContext jobExecution),这是在触发"触发器"时运行的方法。

设置时间表:

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve a scheduler from schedule factory
Scheduler scheduler = null;
try {
    scheduler = schedulerFactory.getScheduler();
}
catch (SchedulerException e) {
    e.printStackTrace();
}
//Set up detail about the job 
JobDetail jobDetail = new JobDetail("jobDetail", "jobDetailGroup", ImplementedJob.class);
SimpleTrigger simpleTrigger = new SimpleTrigger("Trigger Name","defaultGroup", DATE);
// schedule a job with JobDetail and Trigger
scheduler.scheduleJob(jobDetail, simpleTrigger);
// start the scheduler
scheduler.start();

循环中没有Thread.sleep()调用,所以它会在100%CPU下"旋转"(不好),但无论如何,这是一个糟糕的设计。一个很大的改进是简单地计算从"现在"到您希望它运行的时间之间的毫秒数,然后调用Thread.sleep(n).

然而,更好的解决方案是使用JDK已经提供的内容。

看看这段代码,它使用JDK并发库中的类。这是一个非常简单的例子:

import java.util.concurrent.*;
public static void main(String[] args)
{
    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    Runnable runnable = new Runnable() {
        public void run()
        {
            // do something;
        }
    };
    // Run it in 8 hours - you would have to calculate how long to wait from "now"
    service.schedule(runnable, 8, TimeUnit.HOURS); // You can 
}

相关内容

  • 没有找到相关文章

最新更新