在特定时间运行Java程序
我需要帮助在特定时间(如下午2点)在服务器上运行Java程序(为新文件编制索引) 有人告诉我Java有一种叫做jobs的东西,但我不知道如何使用它。我试过这个:在特定时间运行Java程序,java,time,runtime,timer-jobs,Java,Time,Runtime,Timer Jobs,我需要帮助在特定时间(如下午2点)在服务器上运行Java程序(为新文件编制索引) 有人告诉我Java有一种叫做jobs的东西,但我不知道如何使用它。我试过这个: boolean cond=true; while(cond){ @SuppressWarnings("deprecation") int heur = new Date().getHours(); @SuppressWarnings("deprecation") int minute= new
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;
}
但有了这个,程序仍然在运行
我怎样才能在指定的时间运行我的程序?有一个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();
有一个叫做API的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
}
循环中没有
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
}
请正确格式化您的代码请正确格式化您的代码请给出一个如何使用的示例!!我下载了它,但我应该将代码放在start()和shutdown()调用之间。我怎样才能给它时间为什么在标准库有你需要的东西时使用石英?你能举个例子说明如何使用!!我下载了它,但我应该将代码放在start()和shutdown()调用之间。我如何给它时间为什么在标准库有你需要的东西时使用石英?