@IzeBerg

Как ограничить время работы потока?

Создаю сервер на Java, каждому клиенту - свой поток, для создания и управления потоками использую класс ExecutorService.
Но беда в том, что некоторые запросы от клиента могут занять слишком много времени, а то и вовсе зависнуть в ожидании ответа от сторонних серверов (такое редко, но случается). Чтобы избавится от этой проблемы я решил по таймауту удалять поток, чтобы не забивать пул потоков, но как это реализовать?
  • Вопрос задан
  • 3887 просмотров
Решения вопроса 1
FanKiLL
@FanKiLL
В ExecutorService треды переиспользуются в этом и вся суть этих пулов.
Каждую задача что вы кидаете например Runnable попадает в очередь и потом выполняется ексекютором когда какой нибудь тред освободится.

Если посмотреть на названия тредов в екзекуторе - они будут примерно такими pool-2-thread-4
Достучатся до треда в котором выполняется ваш код, вы можете прям из Runnable или Callable смотря что вы там скармливаете executor'y
Thread.currentThread().getName() //например получить имя треда в котором выполняется Runnable


Если хотите прервать тред по каким то причинам, то примерно так.
Thread.currentThread().interrupt();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bimeg
Использовать таймаут соединения - если долго то забивать на клиента. Или NIO - там можно обрабатывать соединение без блокировок (и как бонус можно заводить один поток на несколько клиентов).
Ответ написан
@bromzh
Drugs-driven development
Можно запускать эти задачи асинхронно. В loop'е или экзекуторе должна быть функция запуска задачи с таймером.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы