есть задача останавливать потоки, прерывать выполнения долгой задачи. их может быть много, например 10 потоков которые выполняются по 1-99999 минут. нужно реализовать функционал остановки этих процессов
Есть веб морда со списком имен(названия отчетов). например 1 сидоров старт 2 петров старт 3 иванов старт 4 пупкин старт ... n хзхз старт
пользователь может натыкать стартов хоть все. в этот момент запись меняет статус на готова в базе и все. А каждые n секунд шедулер дергает нужные записи с нужным статусом и запускает генерацию отчета в отдельном потоке. генерация одна для всех только данные разные. А на веб морде просто обновляется табличка ajax ом и в зависимости от статусов показывает отчет в каком состоянии. когда поток завершит выполнения генерации то ставит записи статус готово. все просто. Но нужно уметь останавливать эти генерации не дожидаясь выполнения. Тоесть на веб морде после старта кнопка меняется на стоп и при нажатии надо прервать поток. Я это делал когда у меня было всего 3 процесса.
но сейчас их не три а много. я думал создать map в который добавлять FutureTask и как кей название а потом находить в нем по ключу нужный и стопить. но хз норм ли это, или может кто знает как это сделать проще/правильней
``А на веб морде просто обновляется табличка ajax ом и в зависимости от статусов показывает отчет в каком состоянии.`` а не проще лонг полингом или сокетами сделать?
Что значит "восстанавливать"? Поддерживать соединение дешевле, чем то, что ты делаешь сейчас. Опрос по таймеру - самое топорное и неуклюжое решение в данном случае.