Я пытаюсь понять, как работает 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 задач находятся в очереди, но только три из них выполняются в любое время.
Любая помощь приветствуется.