![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Kircul |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: 6 Всего: 7 |
math64,
Я конечно не гуру, но мне кажется что прерывать поток/нить правильнее будет как в данном туторе. Не стоит изобретать велосипед. |
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Ага. И раз уже заговорили о велосипедах, то прерывать такой поток перед выходом из приложения не обязательно. Можно просто запустить его как daemon:
-------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
А если здесь isX() =false несколько секунд насколько плохо использовать вместо потоков
while(!isX()); |
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
А если здесь isX() =false несколько секунд насколько плохо использовать вместо потоков
while(!isX()); |
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
А здесь вот конкретно для моего случая
Нужно сделать break только тогда, когда isX() вернет true А сейчас после thread.start() - выход. switch (key) { case value: final Runnable r = new Runnable() { public void run() { while(!isX()) { try { Thread.sleep(10000); } catch (InterruptedException ex) { } } } }; Thread thread = new Thread®; thread.start(); break; |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Thread дожен что-то еще делать кроме опроса isX() - (например, после выхода из цикла) иначе он бесполезен. Ну и вызови setDaemon(), как посоветовали, чтобы программы нормально завершалась, еслы isX() всегда возвращает true.
|
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
здесь thread должен ждать пока переменная не станет true и только затем должен быть break.
|
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
Вот здесь после thread.join() поток разве жив? |
|||
|
||||
Kircul |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: 6 Всего: 7 |
[offtopic]Asafj, прочитайте вы наконец хоть какую-нибудь книгу по Java![/offtopic]
|
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
А все таки - кто-нибудь в состоянии обьяснить- почему поток не завершается после выхода из цикла?
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Если основной поток ждёт завершения второго потока, ждущего isX() == false, зачем тебе второй поток? Опрашивай isX() в основном. Второй поток нужен только для того, чтобы освободить основной поток для какого-либо полезного дела.
|
|||
|
||||
Asafj |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.8.2010 Репутация: нет Всего: нет |
А как в основном опрашивать?:
while(!isX()); я думаю здесь не вариант А если while(!isX()) {Thread.sleep();} зависает |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |