Вопрос: Мне интересно узнать, как лучше всего убить давнюю операцию, которая выполняется как фоновый поток (давайте назовем этот поток WorkerThread
) в Java 1.2.
Сценарий
В частности, я разрабатываю приложение для устройств Blackberry, с помощью которого я устанавливаю HTTP-соединение. Большая картина: запрос URL, если он перенаправлен в фоновый поток (WorkerThread
), поток выполняет запрос и возвращает результат с помощью обратного вызова.
Подробности сценария
Теперь существует ситуация, когда во время соединения существует соединение для передачи данных , но затем по любой причине (проезжает через туннель), что соединение больше не существует. Из-за ограничений в архитектуре проектирования Blackberry это фактическое соединение будет зависать, так как время ожидания установлено равным 2 минутам. В результате крайне необходимо уничтожить соединение, которое зависало в течение относительно (15 секунд) длительного периода времени.
Мое текущее решение - 2 Theads?
Сейчас мое текущее решение - запустить WorkerThread
внутри другого потока (давайте назовем этот новый поток MonitorThead
). MonitorThread
начинает WorkerThread
, спит в течение 1000 мс, а затем регулярно проверяет, жив ли WorkerThread
. Если через 15 секунд WorkerThread все еще активен, MonitorThread переводит WorkerThread в спящий режим и завершает работу. Это действительно лучший подход?
Краткое изложение вопросов и ключевых моментов
Таким образом, ниже приведен основной вопрос и основные ограничения, связанные с этим вопросом. Ура!
Как мне успешно завершить фоновый поток Java, застрявший в определенной операции?
Сценарий Ограничения:
- Нет контроля над приостановкой работы
и проверьте состояние запрошенных потоков
- Специфично для Blackberry
реализация Java ME 1.2 и его
Thread API , так что нет явного
kill () метод
- Больше всего волнует передовая практика и как
наиболее безопасно убить удерживающую нить.
Отслеживание / редактирование
Нил Коффи рекомендовал, чтобы я просто держал ссылку на объект соединения и вместо этого вызывал close () для этого объекта. Я сейчас изучаю это ...