java - 方法在其生命周期中应该只调用一次

标签 java static classloader application-lifecycle

我有一个方法,它实际上是一个调度程序,它每隔一小时运行一个进程并每小时创建一个日志文件。
我想在应用程序生命周期中调用此方法一次,所以我从静态 block 中调用它。
但我觉得这不起作用,因为文件有时会在一小时内生成,有时会提前生成。我在某处听说静态 block 只执行一次是不是真的?
如果是,我该怎么办?

最佳答案

静态初始化程序 block 仅在类加载器加载类时执行一次。它们执行的时间与您的应用程序逻辑密切相关。更准确地说,不同的类加载器可能会加载您的类,因此静态 block 在理论上可以执行多次。

出于调度目的,请尝试使用开箱即用的调度程序库,例如 Quartz 调度程序。 ( http://quartz-scheduler.org ) 第一次使用时这似乎有点开销,但是这些库提供了您最终可能需要的高级功能。举个简单的例子:如果你的程序在一个小时内停止并重新启动怎么办?那么这个过程可能会在这个特定的时间内运行两次。使用 quartz ,您也可以处理这种情况。

关于java - 方法在其生命周期中应该只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941316/

相关文章:

java - 哪些元素将被收集为垃圾(SCJP Book Q)

java - 是否可以在 IntelliJ IDEA 中找到所有 (java) "foreach"循环?

java - 在 LAMP 系统上与 R(R 项目)、MySQL 和 Java 通信的最有效方式是什么?

class - Swift 中的静态函数和类函数有什么区别?

java - Struts <bean :cookie> tag breaks on WebLogic 11gR1

Java 类加载器的复杂性

java - 忽略来自 @EqualsAndHashCode 的 HashCode - Lombok

java - 归并排序静态方法

java - 静态变量在 main 方法之外出现 null

java - 如何在 Java 中卸载已经加载的类?