我想提出一個CSP求解,計算這樣一個特定問題的所有組合子解決方案(簡稱放):如何從另一個終止Java進程?
// 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;它們是否好用選擇?)。這意味着我或用戶無法終止該流程,如果時間過長。
我想添加具有隨意取消解決過程選項的功能。
因此,我將宣佈在求解類的新方法,將終止該進程,這將有效地停止解析過程:
public void stopResolutionProcess() {
// kill the process, therefore, stop the resolution process
}
我不能就這麼叫problem.getSolver().stopResolutionProcess()
後的解決過程已經開始,因爲該線程已經運行,直到該進程結束,該方法調用將永遠不會執行。
那麼我怎麼能做到這一點?客戶如何指示託管在雲中的服務終止正在運行的進程?
此解決方案不起作用。 'solve'方法只是調用Choco方法'solver.findSolution()'。這是'findSolution()'方法,可能需要很長時間才能完成。 – dabadaba
正如我所說。這更多的是一個普遍的問題,這個例子實際上只是理論上如何實現這一點的一個起點。檢查標誌的位置並不重要。在AppEngine中,根本不使用線程,您可以使用任務隊列並檢查緩存的數據存儲區值,因此'keepRunning'實際上是查詢數據存儲區的方法。 – konqi
爲了線程安全,請務必將'keepRunning'標誌標記爲'volatile' –