Завершить поток из веб-запроса, который был создан другим веб-запросом - PullRequest
0 голосов
/ 21 марта 2012

У меня есть два запроса в Tomcat. Один HTTP-запрос создаст поток. Клиент может использовать новый HTTP-запрос для завершения того же потока.

Возможно ли это сделать? По возможности как?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

да, это возможно

см. http://oreilly.com/catalog/jservlet/chapter/ch03.html жизненный цикл сервлета

см. сервлет с нитью

см. запрос

1 голос
/ 21 марта 2012

О, пожалуйста, не создавайте неуправляемые потоки самостоятельно в приложении Java EE. Используйте Executor с фиксированным пулом потоков. Используйте Callable в качестве задач и используйте Future в качестве будущих результатов.

Создайте его при запуске приложения (например, в ServletContextListener или в сервлете init()).

ExecutorService executor = Executors.newFixedThreadPool(10); // Pool of 10 threads.

По первому запросу отправьте ему задание и получите результат Future. В приведенном ниже примере предполагается, что он имеет тип String и что Task представляет собой Callable<String>:

Future<String> result = executor.submit(new Task());

Сохраните это в сеансе:

request.getSession().setAttribute("result", result);

По любому последующему запросу в том же сеансе вы можете получить его из сеанса и проверить, выполнен ли он или нет, и при необходимости отменить его.

Future<String> result = (Future<String>) request.getSession().getAttribute("result");

if (result != null) {
    if (!result.isDone() && userWantsToCancel) {
        result.cancel();
    }
}

Смотри также:

1 голос
/ 21 марта 2012

Да, это возможно при определенных условиях:

  1. Ваша тема должна быть остановлена. Либо, проверив флаг в цикле, прерывая поток, если он спит, и т.д ... Некоторые объяснения можно найти здесь

  2. Вы можете использовать объект сеанса, чтобы сохранить поток и найти его обратно, когда поступят вторые запросы. Это требует, чтобы клиент поддерживал сеанс (с помощью файла cookie или параметра запроса, ...). Есть и другие альтернативы этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...