Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Threads - многократное использование


Автор: Се ля ви 25.10.2006, 10:58
Столкнулся с глюком, который был, видимо, связан с тем, что созданный поток, после завершения, у меня почему-то не запускается вновь. Пришлось сделать так: каждый раз пересоздавать объект потока для его повторного запуска, что несколько неудобно. В документации и книгах про это молчёк - будто считается, что объект наследника Tread`а создаётся лишь для единственного запуска и это нормально.

Но можно ли всё-таки как-то повторно использовать Thread`ы?

Автор: tux 25.10.2006, 11:07
Здесь есть пример реализации пула потоков, может быть поможет - http://www.informit.com/articles/article.asp?p=30483&rl=1.

Автор: LSD 25.10.2006, 11:48
Цитата(Се ля ви @  25.10.2006,  11:58 Найти цитируемый пост)
Столкнулся с глюком, который был, видимо, связан с тем, что созданный поток, после завершения, у меня почему-то не запускается вновь. Пришлось сделать так: каждый раз пересоздавать объект потока для его повторного запуска, что несколько неудобно. В документации и книгах про это молчёк - будто считается, что объект наследника Tread`а создаётся лишь для единственного запуска и это нормально.

Это не глюк, так и должно быть. Поток может отработать, только один раз. И в доке по Thread.start() это описано:
Цитата
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.


Любой приличный J2EE контейнер имеет пул тредов.

Добавлено @ 11:54 
И кстати в JDK 1.5 есть стандартный пул тредов java.util.concurrent.ThreadPoolExecutor.

Автор: Се ля ви 25.10.2006, 13:33
Ясно.
Интересно, а с чем это связано? Какие-то проблемы на низком уровне с реализацией тредов? Почему так сделали, никто не в курсе?

Автор: LSD 25.10.2006, 14:20
Хотя это и не обязательно, но в современных реализациях JVM Thread основывается на потоках ОС. А поток в ОС это одноразовая вещь (почему, это отдельный разговор).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)