Страницы

Поиск по вопросам

вторник, 16 октября 2018 г.

Как реализован пул потоков в Java/C++?

Суть пула понимаю, но конкретной реализации не нашёл. Т.е. мне интересно, каким образом пул поток может повторно использовать потоки, если те отработали с 1 задачей и принять в себя новую, но насколько мне известно поток после завершения задачи повторно быть использованным не может, т.е. повторно выполнить Thread.start() использовать нельзя, отсюда вопрос, как пул потоков экономит ресурсы на создании поток, если потоки после завершения повторно использовать нельзя и всё равно необходимо пересоздать поток, т.е. меня интересует механизм. Может я чего-то не знаю или чего-то упустил и просто не в курсе как юзать поток повторно без получения Exception. Также хотелось бы услышать мнение C++ специалистов (В С++ я не особо силён), если есть различия с Java. Заранее спасибо.


Ответ

А кто вам сказал, что поток завершается?
Если упростить, то потоки в пуле крутятся бесконечно, по сути, это:
while (true){ // берётся задача из очереди и выполняется sleep(...); }
Ближе к реальности что-то такое:
while (!pool.isShutdown()) { Runnable task = pool.waitForTaskOnQueue(); // ждём задачу task.run(); // выполняем }

Комментариев нет:

Отправить комментарий