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);