Как остановить поток, выполняющийся через TaskExecutor из основного потока после того, как он не отвечает в течение нескольких секунд? - PullRequest
0 голосов
/ 18 июля 2011

Я использовал TaskExecutor из весны и будущего, чтобы получить будущее от задачи, но теперь, когда какая-то задача не отвечает через некоторое время, я должен остановить эти задачи. Я пытался использовать метод Future.cancel (), но его нет Вы можете предложить мне какой-нибудь метод, чтобы остановить его? Моя ветка ожидает чтения содержимого Html по ссылке ... как мне остановить задачу

Редактировать: соответствующий код:

URL link = new URL(Content);
URLConnection yc = link.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
String inputLine;
StringBuffer Sbuff = new StringBuffer();
while (((inputLine = in.readLine()) != null) &&
        ((Calendar.getInstance().getTimeInMillis() - TimeatStart) / 1000) < 4) {
    Sbuff.append(inputLine);
}

1 Ответ

2 голосов
/ 18 июля 2011

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

Редактировать: Исходя из вашего исходного кода, первое, что вам нужно сделать, это обязательно вызвать connect () для URLConnection. В противном случае ничего не произойдет. Взгляните на Работа с URL в Учебном руководстве по Java. После этого, если вы все еще хотите установить тайм-ауты, используйте setConnectTimeout () , чтобы установить количество времени, которое следует пытаться подключить до истечения времени ожидания, и setReadTimeout () , чтобы установить количество время ожидания получения данных после отправки запроса.

...