Java 尝试每24小时调用一个函数
我试图每天调用一个函数。现在我的代码如下:Java 尝试每24小时调用一个函数,java,Java,我试图每天调用一个函数。现在我的代码如下: do { Thread.sleep(1000*60*60*24); readInFile(); } while (true); 问题是它每天都被调用,加上执行函数readinfle所需的时间。有没有办法每24小时回拨一次电话或做点什么?你可以试试这个: Timer timer = new Timer (); TimerTask t = new TimerTask () { @Override public void r
do {
Thread.sleep(1000*60*60*24);
readInFile();
} while (true);
问题是它每天都被调用,加上执行函数readinfle
所需的时间。有没有办法每24小时回拨一次电话或做点什么?你可以试试这个:
Timer timer = new Timer ();
TimerTask t = new TimerTask () {
@Override
public void run () {
// some code
}
};
timer.schedule (t, 0l, 1000*60*60*24);
或者你可以使用
一种ExecutorService,可以安排命令在给定时间后运行
延迟,或周期性地执行
您可以使用方法以固定速率调用Runnable
每天调用runnable的示例代码(没有初始延迟):
您可以使用调度程序(如Quartz或Spring)将代码设置为每天运行一次 弹簧 石英
使用主机任务调度系统调度要定期执行的应用程序。(例如
cron
或Windows任务调度程序)让线程睡眠24小时通常不是一个好主意。您可以计算它下一次需要运行的时间。然后睡眠一分钟,将当前时间与计算时间进行比较。如果必须是纯Java,我会查看Executors.newScheduledThreadPool。创建一个大小为1的池,并给它一个运行readinfle()方法的Runnable。您也可以使用另一个线程来执行该函数,保持该线程处于活动状态。或者,通过睡眠12小时、6小时、3小时等方式,慢慢地向上爬,直到一秒钟,使用实时时钟重新计算剩余睡眠时间的毫秒数。这不会比睡眠调用更好。s/schedule/scheduleAtFixedRate/
@MartinJames:-Hmm..ScheduledExecutorService会做到这一点。Tunaki已经成功了。Timer
/TimerTask
也可以做正确的事情,但您需要使用一个“AtFixedRate”版本:您所做的是“重复固定延迟执行”,这与固定睡眠有相同的问题。
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.DAYS);
//1:01 am every day
@Scheduled(cron = "0 1 1 * * ?")
public void readDaily() {
readInFile();
}
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
//configure the scheduler time
Trigger trigger = new CronTrigger("trigger1", "group1");
trigger.setCronExpression("0 0 15 * * ?"); //3pm every day
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);