Я делаю решатель CSP, который вычисляет все комбинаторные решения конкретной задачи, подобной этой (кратко):
// Say we are in a Solver class
public void solve() {
// find solution...
}
// This would be in a Problem class
problem.getSolver().solve();
Существует большая вероятность того, что процесс разрешения займет много времени, например, более пары минут. До сих пор, когда это занимало так много времени, я просто остановил процесс через консоль.
Но в конечном итоге я собираюсь опубликовать свое приложение как веб-приложение на хосте, который поддерживает приложения Java (побочный вопрос: я видел, что могу сделать это в Google Cloud, и мне также рассказали об AWS; они хорошие варианты?). Это означает, что я или пользователь больше не могу завершить процесс, если он займет слишком много времени.
Я хочу добавить функциональность возможности отмены процесса разрешения по желанию.
Поэтому я бы объявил новый метод в классе Solver, который завершит процесс, что фактически остановит процесс разрешения:
public void stopResolutionProcess() {
// kill the process, therefore, stop the resolution process
}
Я не могу просто вызвать problem.getSolver().stopResolutionProcess()
после того, как процесс разрешения уже запущен, потому что поток уже запущен, и пока этот процесс не завершится, вызов этого метода никогда не будет выполнен.
Так как же я мог это сделать? Как клиент может сигнализировать службе, размещенной в облаке, о завершении запущенного процесса?