use*_*440 2 java static jvm classloader
我有一个使用静态方法来包装远程API调用的类.
一般来说,我不希望我的API服务器一直"监听"这些调用,而只是在程序使用该类时才监听.所以我需要一种方法告诉服务器在类加载时"唤醒"(我发送"唤醒"消息的方式是无关紧要的).
我知道我可以在调用第一个类方法时唤醒服务器,但是我希望它在类加载到正在运行的程序后立即就绪(即使它是懒惰加载的).
此外,知道何时不再使用该类会很好,所以我可以告诉服务器重新入睡.
基本上,我正在寻找整个班级的"构造者"和"终结者".可以这样做吗?
编辑:我忘了提到一个非常重要的事情,我不能让用户使用公共静态方法或类似的东西手动初始化/完成类.这堂课需要像普通的本地班级一样.
您可以使用静态初始化块:
class YourClass {
static {
System.out.println("I got loaded!");
}
}
Run Code Online (Sandbox Code Playgroud)
这将在JVM加载类时调用.
对于卸载部分,一种方法(neccessarilly not best)是在静态初始化器中启动一个定时器,在该初始化器中,在一段时间不使用之后关闭资源.使用将由被调用的构造函数或类似的东西指示,但实现并发问题可能很棘手.
另一种方法是编写自定义类加载器.