当前位置: 首页 > 面试题库 >

在特定时间运行Java线程

史涵育
2023-03-14
问题内容

我有一个Web应用程序,每小时与中央数据库同步四次。该过程通常需要2分钟。我想将此进程作为线程在X:55,X:10,X:25和X:40运行,以便用户知道在X:00,X:15,X:30和X:45他们有数据库的干净副本。这只是管理期望。我已经通过了执行器,java.util.concurrent但是调度是通过scheduleAtFixedRate它完成的,我认为不能保证以小时为单位的实际运行时间。我可以使用第一个延迟来启动,Runnable以便第一个接近启动时间和每15分钟的计划,但似乎时间上可能会有所不同。有没有一种更简单的方法来安排线程在每25小时之前5分钟运行一次?


问题答案:

您可以让Runnable安排其“下次运行”。

如,

class Task implements Runnable {
    private final ScheduledExecutorService service;

    public Task(ScheduledExecutorService service){
        this.service = service;
    }

    public void run(){
        try{
             //do stuff
        }finally{
            //Prevent this task from stalling due to RuntimeExceptions.
            long untilNextInvocation = //calculate how many ms to next launch
            service.schedule(new Task(service),untilNextInvocation,TimeUnit.MILLISECONDS);
        }
    }
}


 类似资料:
  • 问题内容: 我需要帮助在特定时间(如下午2点)在服务器上运行Java程序(以索引新文件)。 有人告诉我Java有一些叫做Job的东西,但我不知道该如何使用。我尝试了这个: 但是有了这个程序仍在运行。 如何在指定时间运行程序? 问题答案: 有一个名为Quartz的API ,您的程序可以在其中调度“作业”,并在该时刻运行它。 在给出示例之前,请尝试使用此链接。 编辑:首先,您必须创建一个实现org.q

  • 我想创建一个条件,当用户下订单时,有一个线程运行20秒来检查数据库的支付状态是完成还是挂起,如果完成了,线程将停止,如果仍然挂起,线程将继续运行20秒,并更新数据库中的状态以取消,我使用mybatis和XML映射器 这是我的代码 下面是我在控制器中的代码 这是数据库 它不会显示任何错误,但也不会改变任何东西...

  • 例如,我想编写一个Java程序,在每天上午12点打印“Hello World”,如何使用Quartz调度器实现这一点? 这样地?我应该把打印“hello world”方法放在哪里?

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?

  • 问题内容: 我想编写一个简单的python脚本来完成特定的工作。我花了一些时间从网站链接信息。 在正确的时间单击这些链接的最佳方法是什么?我是否需要计算当前电流与列表中的电流之间的时间间隔并睡眠一会儿? 我真的停留在这一点上,并欢迎任何可能有用的想法。 问题答案: 看一下Python的sched模块。

  • 问题内容: 我有一个线程,需要每10秒执行一次。该线程包含对另一台服务器上的数据库的多次调用(12-15)。此外,它还可以访问大约3个文件。因此,将有大量的IO和网络开销。 执行上述操作的最佳策略是什么? 一种方法是将sleep方法与while循环一起使用,但这将是一个糟糕的设计。 在这种情况下,类似于Timer的类会有所帮助吗?另外,最好创建几个更多的线程(一个用于IO,一个用于JDBC),而不