【问题标题】:Calling Method at the End of Program Execution程序执行结束时调用方法
【发布时间】:2015-10-20 19:06:57
【问题描述】:

我正在为 API 端点创建一个客户端库,使用 Unirest 来模拟 GETPOST 请求。程序完成后,必须调用以下代码来终止当前线程。

Unirest.shutdown(); // must be called in order to clear the high CPU consuming thread 

是否有任何可能的方法在程序执行结束时在我的客户端库中隐式调用它?

【问题讨论】:

标签: java unirest


【解决方案1】:

是的 - 您最好的选择可能是 关机挂钩。当 JVM 终止时,它将被调用/执行。举个例子:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        System.out.println("JVM shutting down, closing Unirest");
        Unirest.shutdown();
    }
}));

您最好在启动 Unirest 服务之后尽快调用addShutdownHook() 方法。

【讨论】:

  • 这看起来不错,但有没有办法在导入我的客户端库后隐式执行这段代码?
  • 我不确定我是否遵循。您的代码是否负责在您的库中启动 Unirest 客户端?如果是这样,这就是您应该添加关闭挂钩的地方。除非使用您的库的项目调用 ,否则您不能(不应该)神奇地开始执行代码。
  • 可以,但是用户可以创建多个请求,只需要关闭一次。因此,在我的库的每个方法中创建多个关闭是没有意义的。
  • 在这种情况下,可能值得维护某种单例或管理器类来负责(使用布尔标志或类似的)来跟踪您是否安装了钩子。所以不管你调用这个UnirestManager.getOrCreateUnirest()方法多少次,它只会安装一次shutdown hook。
  • 有没有办法使用Runtime 进行检查或只使用布尔值?
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 2011-03-11
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2022-12-18
相关资源
最近更新 更多