![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
САБЖ!
Ведь метод stop() deprecated А как его корректно завершить ??
??? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Поток нужно завершать из потока. Т.е. оператором return в методе run() этого потока.
|
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Вообщем-то предлагается обычно сделать переменную в классе потока, которую он будет постоянно отслеживать. Ну и при желании завершить поток она выставляется в состояние, по которому поток это понимает и заканчивает совю работу.
|
|||
|
||||
RebornCrusader |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 2 Всего: 6 |
![]() Кстати, философский вопрос: почему интересно разработчики Java изначально сморозили такую глупость, несмотря на очевидную потребность в корректном завершении любого процесса? Я просто с трудом представляю задачу (кроме отрисовки GUI), которая идеологически (не обязательно в реализации) не требовала бы корректного завершения вместо хладнокровного убийства? ![]() И вообще куда красивее было бы положить stop() в Runnable - пусть разработчик сам отределяет способ останова, но при этом остаётся унифицированный вызов. А может не только его? --------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На эту тему у них даже есть отдельный документик: Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
RebornCrusader |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 2 Всего: 6 |
Хорошая статья, спасибо. Хоть и не совсем отвечает на мой вопрос, проясняет другие вещи
![]() --------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вполне отвечает. Основная мысль в том, что корректно завершить поток, можно только из самого потока. Потому все методы "принудительного" завершения потока - deprecated.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 2 Всего: 9 |
Дык идея в том, чтобы сам поток решал - можно или нельзя завершать его. Это будет корректно. А снаружи - это уже "убийство"
![]() Добавлено через 41 секунду Ну вот - не успел ответить - LSD уже успел. Эх, прогорел мой плюсик ![]() |
|||
|
||||
RebornCrusader |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 2 Всего: 6 |
Я это понял пять лет назад. Вопрос не в этом. Когда мы хотим корректно завершить поток - мы снаружи выставляем какой-то флаг - дескать, завершайся. Поток у себя внутри периодически проверяет этот флаг, и действует соответственно. Только почему это не реализовано на уровне интерфейса? Я немного утрирую, но вот пример такого поведения:
Разработчик имплементит метод, где устанавливает себе какой хошь флаг, и как угодно его обрабатывает методе run(). А фишка в том, что этот механизм можно вызвать на стандартном уровне. Это не убийство, а вежливая просьба. Почему изначально не сделано столь очевидной вещи, или я всё-таки чего-то недопонимаю? ![]() --------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Что тебе мешает это сделать самому? 2. Интерфейс Runnable используется много где, а не только в потоках. И например в SwingUtilities.invokeLater() метод stopPlease() будет явно лишним. 3. Не совсем понятно какой контракт надо закладывать в этот метод: как скоро поток должен остановиться, когда он должен выкидывать DontWantToStopException и т.д. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
AlexeyVorotnikov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
Поток должен остановиться как только, так сразу (когда сможет/захочет). А ексепшн кидать, когда совсем не хочет останавливаться. ![]() -------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну и как можно работать с таким контрактом? Есть у нас поток который читает данные и в данный момент заблокирован на операции чтения, он может так висеть несколько часов или даже дней. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |