在Java中,如何在加载或卸载类时运行静态方法?

时间:2014-03-27 21:26:51

标签: java static jvm classloader

我有一个使用静态方法来封装远程API调用的类。

一般来说,我不希望我的API服务器一直“监听”这些调用,而只是在程序使用该类时才监听。所以我需要一种方法告诉服务器在类加载时“唤醒”(我发送“唤醒”消息的方式无关紧要)。

我知道我可以在调用第一个类方法时唤醒服务器,但是我希望它在类加载到正在运行的程序后立即就绪(即使它是懒惰加载的)。

另外,知道何时不再使用该类会很好,所以我可以告诉服务器重新入睡。

基本上,我正在寻找整个班级的“构造者”和“终结者”。可以这样做吗?

编辑:我忘了提到一个非常重要的事情,我不能让用户使用公共静态方法或类似的东西手动初始化/完成类。这堂课需要感觉像一个普通的本地班。

1 个答案:

答案 0 :(得分:6)

您可以使用静态初始化块

class YourClass {
    static {
        System.out.println("I got loaded!");
    }
}

这将在JVM加载类时调用。

对于卸载部分,一种方式(neccessarilly not best)是在静态初始化程序中启动计时器,在该初始化程序中,在一段时间不使用之后关闭资源。使用将由被调用的构造函数或类似的东西指示,但实现并发问题可能很棘手。

另一种方法是编写自定义类加载器。