试图每24小时调用一次函数

时间:2015-10-13 14:44:56

标签: java

我正在尝试每天调用一个函数。现在我的代码如下:

do {
    Thread.sleep(1000*60*60*24);
    readInFile();
} while (true);

问题在于每天都会调用它以及执行函数readInFile所需的时间。有没有办法每24小时进行一次回调或其他事情?

3 个答案:

答案 0 :(得分:6)

您可以使用ScheduledExecutorService.scheduleAtFixedRate方法以固定费率调用Runnable

每天调用runnable的示例代码(没有初始延迟):

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.DAYS);

答案 1 :(得分:3)

你可以试试这个:

func saveContext () {
    if let moc = self.managedObjectContext {
        var error: NSError? = nil
        if moc.hasChanges && !moc.save(&error) {
        //ERROR: CANNOT CONVERT VALUE OF TYPE 'INOUT NSERROR?'(AKA 'INOUT OPTIONAL<NSERROR>') TO EXPECTED ARGUMENT TYPE '()'
            NSLog("Unresolved error \(error), \(error!.userInfo)")
            abort()
        }
    }
}

或者您可以使用ScheduledExecutorService

  

可以安排命令在给定后运行的ExecutorService   延迟,或定期执行。

答案 2 :(得分:1)

您可以使用Quartz或Spring等调度程序将代码设置为每天运行一次。

<强>弹簧 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

http://spring.io/guides/gs/scheduling-tasks/

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='hammer',lon_0=0,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,420.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Hammer Projection")
plt.show()

<强>石英 https://quartz-scheduler.org

//1:01 am every day
@Scheduled(cron = "0 1 1 * * ?")
public void readDaily() {
  readInFile();
}