首页 > 解决方案 > OptaPlanner 后台线程未终止

问题描述

我们在独立的 Java 应用程序中运行 OP (v8.11.1.Final)(因此我们可以对其进行评估),但注意到一旦求解器完成并返回解决方案,JVM 将不会终止。main一旦我们从使 JVM 保持活动状态的方法返回后,似乎仍有一个后台线程在运行。解决这个问题的唯一方法是执行一个System.exit()看起来不太好的解决方案。

以下是仍处于活动状态的线程列表。我猜其中一些是 JVM 管理线程,但某些东西仍在运行导致此问题。

在此处输入图像描述

有任何想法吗?如果您需要更多信息,请告诉我。提前致谢。

标签: javajvmoptaplanner

解决方案


SolverManager.close()用完就打电话。在 Quarkus 和 Spring Boot 中,这会自动发生。

或者更好的是,在 ARM 块中使用它:

try (SolverManager<...> solverManager : SolverManager.create(...)) {
    ...
}

SolverManager 是 ThreadPool 的包装器。就像线程池需要显式关闭一样,SolverManager 也是如此(因此它可以关闭其内部线程池)。


推荐阅读