我需要帮助在特定时间(如下午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;
}
但是这个程序仍在运行。
我怎样才能在指定的时间运行我的程序?
答案 0 :(得分:3)
Theres是一个名为Quartz的API,它是您的程序可以安排“作业”的地方,它将在那时运行它。
在我举一个例子之前,试试this link。
编辑:
首先,您必须创建一个实现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();
答案 1 :(得分:2)
循环中没有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
}