| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > обить поток... |
| Автор: sith 10.4.2007, 20:01 |
| .... нужно убить поток... что бы он полностью загнулся и перстал существовать... ...на вызов фунции ... <поток>.stop(); компилятор предупреждает.... -uses or overrides a deprecated API... что это... и чем это мне грозит... |
| Автор: powerOn 10.4.2007, 20:13 |
| http://forum.vingrad.ru/index.php?showtopic=144779&st=0&anchor=entry1089069 |
| Автор: Vasay 11.4.2007, 00:39 | ||
Можно убить поток вызвав thread.join(1); -умрет через 1 милисекунду.
Но это не лучший способ. ИМХО лучше чтоб поток завершал себя сам. Можно создать переменную в потоке (например boolean ThreadRun = true), которая доступна из вне, и если надо убить поток, то поставить эту переменную в false (Хорошо бы чтоб это делал метод setThreadRun(boolean)), а поток во время работы проверял бы состояние этой переменной, и если она false, завершался бы. |
| Автор: w1nd 11.4.2007, 09:44 |
| Автор: Boing747 11.4.2007, 10:01 | ||
Сам то, нибось так поток не останавливаешь. |
| Автор: LSD 11.4.2007, 10:43 | ||
Thread.join() - это вполне нормальный стиль, вот только поток он не останавливает. И вообще господа, может уже пора начать JavaDoc-и читать, а? |
| Автор: Boing747 11.4.2007, 11:06 | ||
LSD,
Thread.join() -конечно нормально и часто испоьзуется, но вот thread.join(1); я ни разу не видел, где используют, уж простите мою неосведомленность (Не в обиду сказанно) |
| Автор: Metal_Heart 11.4.2007, 13:14 |
| если бы sith прошелся поиском по форуму, то понял бы, что убить поток из-вне можно только убив саму jvm. кажется так, или я не прав? |
| Автор: Vasay 11.4.2007, 13:23 | ||
Честно, считал что вызов join(long millis) - ждет максимум millis милисекунд, и если поток за это время не завершился, то его убивают. Судя по всему я был неправ.
Не не останавливаю |
| Автор: FlasH 12.4.2007, 09:53 | ||
А что делать когда тред встал на read() ?
|
| Автор: Vasay 12.4.2007, 10:10 | ||||
Выставлять timeout для сокета... |
| Автор: LSD 12.4.2007, 11:31 |
Для некоторых потоков, можно вызвать interrupt() у треда. |
| Автор: kkorsakoff 12.4.2007, 11:54 |
| А почему для некоторых? В каких-то случаях так делать нельзя? Просто я всегда использовал interrupt(), будет интересно узнать, если так не всегда можно поступать. |
| Автор: LSD 12.4.2007, 12:04 | ||
Вот что написано в JavaDoc по interrupt():
Файловые и сетевые каланы - interruptible, но в принципе могут быть каналы, которые не interruptible. |
| Автор: sith 13.4.2007, 14:58 |
| Thread.join() - метод который останавливает поток до его удаления... так написано в АПИ... если я все правильно понял...??? |
| Автор: LSD 13.4.2007, 15:14 | ||
Thread.join() - останавливает текущий поток, до тех пор пока не остановится тот поток у которого был вызван join(). Например:
будет создан еще один поток, в котором будет запущена некая задача. Далее текущий поток будет ждать 10 секунд завершения этой задачи, если дождется, то вернет true иначе false. |
| Автор: kkorsakoff 13.4.2007, 15:21 | ||||
Это понятно, а на практике? |
| Автор: Boing747 13.4.2007, 15:27 | ||||||
Этот метод используют для того, чтобы дождаться пока остальные потоки не остановятся.
Здесь в мэйне ждем завершения потоков
пока они не остановятся ничего не происходит. |
| Автор: LSD 13.4.2007, 15:42 | ||
|