【发布时间】:2016-04-01 08:50:01
【问题描述】:
我正在制作一个 CSP 求解器,它可以计算像这样的特定问题的所有组合解决方案(简而言之):
// Say we are in a Solver class
public void solve() {
// find solution...
}
// This would be in a Problem class
problem.getSolver().solve();
解决过程很可能需要很长时间才能完成,比如几分钟以上。到目前为止,当它花了这么长时间时,我刚刚通过控制台停止了这个过程。
但最终我会将我的应用程序作为 Web 应用程序发布在允许 Java 应用程序的主机中(附带问题:我已经看到我可以在 Google Cloud 中做到这一点,并且我也被告知有关 AWS;他们是好的选择?)。这意味着我或用户不能再终止进程,如果它花费的时间太长。
我想添加可以随意取消解决过程的功能。
所以我会在 Solver 类中声明一个新方法来终止进程,这将有效地停止解析过程:
public void stopResolutionProcess() {
// kill the process, therefore, stop the resolution process
}
我不能在解析过程已经开始之后才调用problem.getSolver().stopResolutionProcess(),因为线程已经在运行并且在该过程结束之前,该方法调用将永远不会被执行。
那么我该怎么做呢?客户端如何向托管在云中的服务发出信号以终止正在运行的进程?
【问题讨论】:
标签: java multithreading google-app-engine constraint-programming choco