У меня возникают трудности с пониманием определенного аспекта аннотации @async и, возможно, работы потоков и объединения потоков в целом. Когда я устанавливаю это в моем весеннем конфигурационном файле:
<task:executor id="WhifExecutor" pool-size="10"/>
<task:annotation-driven executor="WhifExecutor" />
не значит ли это, что будет запущено только 10 потоков? Тем не менее, когда я запускаю функцию с @async 1000 раз, она сразу же продолжается с остальной частью кода после вызова (в консоли отображается простое сообщение, показывающее, сколько раз функция была вызвана). Затем через некоторое время функции пула начинают возвращать свои значения, но, как ни странно, только из 1 пула и 10 различных потоков. Что здесь происходит? Как он может вызывать все эти 1000 функций, но использовать только 10 потоков? Может быть, он помещает их все в какой-то стек перед запуском потоков? Я попытался прочитать документацию по этому вопросу, но не смог найти ничего об этом явлении.
Кроме того, есть ли способ заставить его ждать запуска потоков, чтобы я не сразу вызывал пару тысяч функций одновременно?