У нас есть приложение, которое обрабатывает элементы и на каждой итерации запускает поток для обновления другой базы данных — не так уж важно, что происходит в этом другом потоке, это очень простое обновление.
Наше первоначальное намерение состояло в том, чтобы (используя поток) убедиться, что основная обработка не задерживается, инициализируя соединение с этой другой базой данных и запуская обновление.
Вчера у нас была проблема, из-за которой (по пока неизвестной причине) база данных замедлилась, и количество параллельных потоков взлетело до небес, в результате чего в этой БД было более 1000 подключений. Итак, мы поняли, что нам нужно больше контроля над потоками.
Мне нужна библиотека или инструмент для нашего программного обеспечения, который может:
1) Поместите потоки/задания/задачи (что угодно — мы можем переписать код, если это необходимо, у нас есть объекты Thread) в очередь, такую как система 2) мы можем определить, сколько потоков выполняется максимально одновременно 3) После завершения потока поток удаляется из очереди, чтобы сборщик мусора мог удалить все задействованные объекты.
Я много читал и нашел ExecutorService (Executors.newFixedThreadPool(5);), но может проблема в том, что он не работает с 3), потому что согласно javadocs:
Потоки в пуле будут существовать до тех пор, пока он не будет явно отключен.
Что, я полагаю, означает, что если приложение продолжает добавлять потоки, потоки будут существовать до тех пор, пока приложение не будет перезапущено (или если я выключу и повторно создам ExecutorService, но мне это кажется хаком).
Правильно ли я считаю, что Executors.newFixedThreadPool(5) не соответствует моему 3) требованию? Действительно ли я получаю проблему с хорошего конца? Мне нужны потоки или что-то другое?
Thread
и Runnable/CallableTask
. - person Kuldeep Jain   schedule 04.08.2014