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