Я пишу приложение для нагрузочного тестирования на Java и имею пул потоков, который выполняет задачи на тестируемом сервере.Таким образом, чтобы создать 1000 заданий и запустить их в 5 потоках, я делаю что-то вроде этого:
ExecutorService pool = Executors.newFixedThreadPool(5);
List<Runnable> jobs = makeJobs(1000);
for(Runnable job : jobs){
pool.execute(job);
}
Однако я не думаю, что этот подход будет очень хорошо масштабироваться, потому что мне нужно создать все объекты 'job'заранее и пусть они сидят в памяти, пока они не понадобятся.
Я ищу способ, чтобы потоки в пуле переходили к какому-то классу JobFactory каждый раз, когда им нужно новое задание, и чтобы фабрика собирала Runnables по запросу до требуемого числаработ были запущены.Фабрика может начать возвращать 'null', чтобы сигнализировать потокам, что больше нет работы.
Я мог бы написать что-то подобное вручную, но это кажется достаточно распространенным вариантом использования иИнтересно, есть ли что-нибудь в замечательном, но сложном пакете 'java.util.concurrent', который я мог бы использовать вместо этого?