java - OptaPlanner 后台线程未终止
问题描述
我们在独立的 Java 应用程序中运行 OP (v8.11.1.Final)(因此我们可以对其进行评估),但注意到一旦求解器完成并返回解决方案,JVM 将不会终止。main
一旦我们从使 JVM 保持活动状态的方法返回后,似乎仍有一个后台线程在运行。解决这个问题的唯一方法是执行一个System.exit()
看起来不太好的解决方案。
以下是仍处于活动状态的线程列表。我猜其中一些是 JVM 管理线程,但某些东西仍在运行导致此问题。
有任何想法吗?如果您需要更多信息,请告诉我。提前致谢。
解决方案
SolverManager.close()
用完就打电话。在 Quarkus 和 Spring Boot 中,这会自动发生。
或者更好的是,在 ARM 块中使用它:
try (SolverManager<...> solverManager : SolverManager.create(...)) {
...
}
SolverManager 是 ThreadPool 的包装器。就像线程池需要显式关闭一样,SolverManager 也是如此(因此它可以关闭其内部线程池)。
推荐阅读
- android - 在应用内购买 iOS 和 Android,可以关联我应用的用户
- c# - 为什么不能在 Firebase CreateUser 之后 Panel_register SetActivity 为(假)?
- javascript - 2019-01-09T11:05:29.000Z 需要一个正则表达式
- java - 我们如何手动重置通过 Spring Boot Java 应用程序使用的 kafka 主题的偏移量?
- angular - 在自定义元素(Web 组件)中使用 mat-select 会打开 shadow DOM 之外的选项
- htmlunit - HtmlUnit:检查HtmlElement是否为HtmlAnchor
- java - 超过整数最大值的解决方案?
- javascript - JavaScript:基于正则表达式预定义顺序的排序算法
- xcode - Xcode 10 “appletv 很忙:准备调试器支持 Apple tv”
- python - 错误“表体没有剩余数据,“list-table”指令要求。” 同时为 Flask 应用程序自动生成 Sphinx 文档