1

我正在为 java-application 寻找一个简单的 cron 类型的解决方案。

我查看了 cron4j,您可以在其中设置执行方法,例如每 5 分钟执行一次。

只是,我有一个自定义要求,如果之前的方法调用仍在运行,它不应该启动另一个同时调用,而只是跳过该调用并在 5 分钟内重试,等等 --- 即我想确保永远不会为同一个作业并行运行 2 个线程。只有当前一个方法调用完成时,才应该开始新的方法调用。

在 Java 中实现此要求的最简单/最稳定的方法是什么?(如果有更好的方法,不必是 cron4j)

4

1 回答 1

0

我更喜欢 Cron4j,因为我相信它轻量级且易于使用。所以我会使用一个应用程序范围的方法来执行这个同步。

例如,如果您的应用程序是分布式的,那么您的作业详细信息必须存储在某个共享存储中,例如数据库。然后在此数据库中,您可以设置一个标志(即每个作业详细信息的列值),以指示该作业是否已在执行。然后,应该通过添加您喜欢的任何偏移量来修改下一个执行时间(即另一个列值,并且我发现拥有一个包含下一个执行标志的列非常有帮助,如果您还没有尝试过,则应该尝试一下)。

如果您的应用程序不是分布式的,那么您可以轻松地使用同步的静态方法或静态ReentrantLock实例来控制同步。

于 2017-08-24T11:59:53.623 回答