ExecutorService: как проверить, выполняется ли мой Callable? - PullRequest
3 голосов
/ 10 ноября 2011

Я использую ExecutorService для обработки запросов задач из нескольких потоков и использую Future, возвращаемый из ExecutorService#submit(), для отслеживания хода выполнения задач.

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

Итак, я хочу знать, обрабатывается ли в данный момент запрос задачи, если это так, то я буду ждать его завершения или в противном случае отменю его и отправлю запрос запрашивающей стороне.

Любая помощь и советы будут оценены. Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

Если вы используете Future.cancel(false), это позволит завершить задачу, если она уже была запущена. Даже если вы используете cancel(true), это может произойти в любом случае, если только разговор не выполняет операцию, которая может быть прервана, или вы не проверите флаг прерывания.

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

1 голос
/ 09 января 2013

Слишком поздно для ответа, но почему вы не определили в своих задачах какой-то изменчивый флаг isStarted? Затем вы можете запросить флаг в вашем предложении catch.

0 голосов
/ 04 июля 2014

Я знаю, что это старый вопрос, но как насчет использования Future.isDone () ?

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