![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
barin_Student |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Все что нашел в поисковике , и все что висит внизу темы , я читал , и пробывал.. но есть одно ,но это все одно и тоже , но у меня не выходит..
Какими способами можно убить поток, исключая: переменную , которая говорит о том что пора выходить из цикла run()? Могу привести строки своего потока , если он потребуется, кто может пояснить , почему после stop()(знаю что так не хорошо останавливать потоки), не запускаеться поток таким вот видом:
![]() -------------------- Нехорошо блин!!! |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
||||
|
||||
barin_Student |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Да на том примере что я привел - он пустой, но у меня на чтение данных порой поток вешаеться , и если я выставлю переменную , толку будет?
Вот моя задачка , как реализованна, вот на ней можно будет поиграцца:
Это сообщение отредактировал(а) barin_Student - 24.4.2008, 14:10 -------------------- Нехорошо блин!!! |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Читаешь данные, проверяешь переменнею, опять читаешь, проверяешь переменненую......... -------------------- Lost.... |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
можно ещё поэкспериментировать с interrupt();
А что значит повиснуть? Несанкционированное повисание потока - это баг, надо его лечить. Если имеется ввиду блокирование потока в ожидании завершения IO операций, то в таких случаях предусматривают таймауты. Это сообщение отредактировал(а) ivg - 24.4.2008, 14:22 |
|||
|
||||
barin_Student |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Если так:
-------------------- Нехорошо блин!!! |
||||
|
|||||
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Тогда уже:
|
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
если зависает где то на чтении - не поможет.. А вообще трассировку делали? где виснет то?
-------------------- Бонифаций. |
|||
|
||||
barin_Student |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Добавлено через 2 минуты и 20 секунд
по своему примеру , я могу еще добавить один класс , и указать где , и могу сказать почему виснет. Если надо , то могу запостить. Это паралельный вопрос , но основной , - это как мне остановить поток при такой ситуации? -------------------- Нехорошо блин!!! |
||||
|
|||||
barin_Student |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Ниужели нельзя stop() , а далее заново запустить? С критическими данными этот поток не работает.
-------------------- Нехорошо блин!!! |
|||
|
||||
Vurn |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 24.5.2007 Репутация: 2 Всего: 3 |
Автору - для этого существует два метода.
Первый - Socket.setSoTimeout(time); Сокет держится в read только указанное время, если данные не получены - выходит с длиной 0, и можно по циклу проверть. Второй Thread.interrupt(); Он рвет состояния чтения указанной нити. read тоже выходит из режима ожидания с длиной 0. |
|||
|
||||
barin_Student |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Счас проверю и посмотрю, но ведь не всегда поток на чтение зависает , , и у меня не сокет , а ком порт., но все равно посмотрю.
-------------------- Нехорошо блин!!! |
|||
|
||||
le_chat |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Была подобная проблема.
Вариант с Thread.interrupt() я не рассматривал, ибо вроде как по описанию при блокирующем вводе-выводе он не поможет. Для se - io операция будет прервана только nio пакета. Есть конечно шанс что внутри реализации, скажем, блокирующего чтения поток вести на wait'е, тогда конечно все должно сработать. Для me nio вообще не предусмотренно, поэтому все решалось закрытием читающего стрима из внешнего трэда. Его вставлял в shouldStop() и закрывал после установки стоп-флага потока. Тогда read() переставал ждать данные и возвращал -1, и run() нормально завершался по стоп флагу. Могу предложить менее красивый и более ограниченный вариат: выставить для читающего потока setDemon(true). Это возможно и не решит проблемы с высвобождением ресурсов, но позволит завершить родительский поток (другими словами - позволит завершить приложение даже если читающий поток не завершился. jvm тоже завершится. Поэтому возможно ресурсы и будут высвобождены). ![]() |
|||
|
||||
barin_Student |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Поток у меня итак демон, и хорошо что он основной тред не останавливает..
Скажем я поток , который хочу чтоб он сдох делаю так: вот скажем поток который нам надо стопнуть , а затем заного запустить
вот отсюдова:
-------------------- Нехорошо блин!!! |
||||
|
|||||
SoulKeeper |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Или цель стоит сделать максимально заумно? |
||||||||
|
|||||||||
Vurn |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 24.5.2007 Репутация: 2 Всего: 3 |
Кстати, никто не мешает, по идее, сделать проверку через .ready() на наличие доступных символов для чтения и, если символы есть - прочесть их в массив. Если ничего нет - отправить в сон не надолго.
|
|||
|
||||
barin_Student |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 488 Регистрация: 10.8.2007 Где: Казахстан , Алмат ы Репутация: 1 Всего: 2 |
Я так и сделал, сорри что не сказал.. Проверяю перед чтением на ready(), если нет то три раза жду и выхожу из цикла. -------------------- Нехорошо блин!!! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |