Вопрос: Мне интересно узнать о лучшей практике для убийства долговременной операции, которая работает как фоновый поток (позволяет вызывать этот поток 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's внедрение Java ME 1.2 и его Thread API, поэтому нет явного метод kill()
- Больше всего обеспокоены лучшей практикой и наиболее безопасно убить удерживающий поток.
Follow Up/Edit
Нил Коффи рекомендовал, чтобы я просто ссылался на объект соединения и вместо этого вызывал закрыть() на этом объекте. В настоящее время я изучаю это...