Я пытаюсь понять, как работает Java FixedThreadPool на практике, но документы не отвечают на мой вопрос.
Предположите простой сценарий, например:
ExecutorService ES= Executors.newFixedThreadPool(3);
List<Future> FL;
for(int i=1;i<=200;i++){
FL.add(ES.submit(new Task()));
}
ES.shutdown();
где Task - это Callable, которые строят некоторые ресурсы, используют их и возвращают некоторый вывод.
Мой вопрос: сколько Task есть в памяти после завершения цикла for? Другими словами: будет ли только 3 Task в то время, когда они создадут свои ресурсы, или все они созданы заранее, так что после .submit у меня есть 200 Task (и их ресурсы), ожидающие выполнения?
Примечание: создание ресурсов происходит в конструкторе Task, а не в методе call().
В javadoc (не стесняйтесь пропустить следующее): меня смущает следующее объяснение в документах Java
Создает пул потоков, который повторно использует фиксированное число потоков, работающих от общей неограниченной очереди. В любой момент, не более nThreads потоков будут активными задачами обработки.
Я полагаю, это означает, что в моем примере все 200 задач находятся в очереди, но только три из них выполняются в любое время.
Любая помощь приветствуется.