在特定时间运行Java程序

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

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

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,它是您的程序可以安排“作业”的地方,它将在那时运行它。

直到我举一个例子,试试这个链接 。

编辑:首先,您必须创建一个实现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 }